zoukankan      html  css  js  c++  java
  • tcp与线程结合

    情景:

    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()
  • 相关阅读:
    单调队列
    Johnson全源最短路
    重链剖分
    矩阵快速幂
    Tarjan
    题解 UVA439 骑士的移动 Knight Moves
    题解 SP10500 HAYBALE
    题解 P4058 [Code+#1]木材
    题解 P3395 路障
    题解 SP24 FCTRL2
  • 原文地址:https://www.cnblogs.com/yongqi-wang/p/13284828.html
Copyright © 2011-2022 走看看