tcp与线程结合
2021-04-20 15:28
标签:int nec star 消息 nbsp def 结合 while 系统 情景: 1.利用tcp实现服务端对客户端传递文件(图片)(接前文); 2.利用线程实现视觉上两个客户端同时向客户端传递文件(图片); 服务端 客户端: tcp与线程结合 标签:int nec star 消息 nbsp def 结合 while 系统 原文地址:https://www.cnblogs.com/yongqi-wang/p/13284828.htmlfrom socket import *
import datetime
from multiprocessing import *
def server():
server_img=socket(AF_INET,SOCK_STREAM)
server_img.bind((‘0.0.0.0‘,9999))
server_img.listen(5)
while True:
print("等待连接")
connfd,addr=server_img.accept()
print("CNNENT FROM:",addr)
print(‘写入图片‘)
with open(datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘)+‘.jpg‘,‘wb+‘) as wimg:
while True:
data = connfd.recv(1024)
if not data:
break
wimg.write(data)
connfd.close()
server_img.close()
#创建线程
server_process=Process(target=server)
#启动线程
server_process.start()
#结束线程
server_process.join()
from socket import *
import multiprocessing
import time
import os
def conect(ip,host,url):
#建立套接字
connect_img=socket()
#建立连接
connect_img.connect((ip,host))
#读取文件
with open(url,‘rb‘) as rimg:
img=rimg.read()
#发送文
connect_img.send(img)
#关闭套接字
connect_img.close()
#在wds和mac系统下必须用main包裹进程否则报错(这与系统差异有关)
if __name__ == ‘__main__‘:
#创建进程p,p2 并传出参数方法一
p=multiprocessing.Process(target=conect,args=(‘127.0.0.1‘,9999,‘1.JPG‘))
#传参方法二
p2=multiprocessing.Process(target=conect,kwargs={‘ip‘:‘127.0.0.1‘,‘host‘:9999,‘url‘:‘2.JPG‘})
#启动进程
p.start()
print("进程1")
#进程名
print(p.name)
#进程号
print(p.pid)
#间隔时间
time.sleep(5)
#虽然线程启动了但是并不是立即就有消息因为TCP协议本身并不能同时处理多个消息
#只有线程1彻底的connfd.clase执行完后,结束了套接字才能从消息队列里对接线程二的消息
p2.start()
print(‘进程2‘)
#结束进程
p.join()
p2.join()
上一篇:kmp算法及应用
下一篇:c++ 顺序容器常用知识总结