php与python通信_PHP与Python间Socket通信代码片段

PHP与Python间Socket通信代码片段,这不是完整的代码,而且代码还需要更多的改进。

服务器端Python代码

#coding:utf-8

'''

Socket 服务器端

常见的协议及端口(这些端口是由操作系统管理的)

ftp-Data:20,

ftp-Control:21

SSH:22,

Telnet:23

SMTP:25,

HTTP:80

POP3:110

IMAP:143

HTTPS:443

'''

import socket,threading

import time,Queue

'''

任务线程

'''

class TaskThread(threading.Thread):

'''

初始化

'''

def __init__(self,queue):

threading.Thread.__init__(self)

self.queue = queue

'''

执行线程

'''

def run(self):

task = self.queue.get() #取出一项任务

self.doTask(task)

self.queue.task_done() #完成任务信号

'''

做任务

'''

def doTask(self,task):

path = './task/'+task+'.txt'

fp = open(path,'w')

fp.write(task)

fp.close()

'''

www.iplaypy.com

'''

def main():

#Socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建tcp socket

s.bind(('localhost',9999))#绑定到9999

s.listen(5) #监听,但只能挂起5以下链接

#创建队列

queue = Queue.Queue()

while True:

client,addr = s.accept()#连接

addr = str(addr)

print("从 %s 获取一个连接"%addr) #直接输出到控制台

timestr = time.ctime(time.time())+"\r\n" #时间羽化输出

strs = '现在是:'+timestr

client.send(strs) #发送输数据

task = str(client.recv(1024))

cs = '%s 客户端返回的数据为:%s'%(addr,task) #接收客户端数据

print(cs)

client.close()

#任务

task = task.split('|')

#将任务写入到队列中

for i in task:

queue.put(i)

#开始线程

for i in task:

t = TaskThread(queue)

t.setDaemon(True) #子线程随主线程一起退出

t.start() #启动线程

t.join(10) #保证每个线程运行,但只等10s

queue.join() #等所有任务都处理后,再退出

if __name__ =='__main__':

main()

客户端PHP代码

/**

* Socket PHP客户端

*

*/

header ( 'Content-type:text/html;charset=utf8' );

$host = 'tcp://localhost:9999';

$fp = stream_socket_client ( $host, $errno, $error, 20 );

if (! $fp)

{

echo "$error ($errno)";

} else

{

fwrite ( $fp, 'one|two|three' );

while ( ! feof ( $fp ) )

{

echo fgets ( $fp ); #获取服务器返回的内容

}

fclose ( $fp );

}

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/other/o2368.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值