tcp与线程结合

2021-04-20 15:28

阅读:768

标签:int   nec   star   消息   nbsp   def   结合   while   系统   

情景:

1.利用tcp实现服务端对客户端传递文件(图片)(接前文);

2.利用线程实现视觉上两个客户端同时向客户端传递文件(图片);

服务端

from 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()

 

tcp与线程结合

标签:int   nec   star   消息   nbsp   def   结合   while   系统   

原文地址:https://www.cnblogs.com/yongqi-wang/p/13284828.html


评论


亲,登录后才可以留言!