tcp与线程结合

Posted yongqi-wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

以上是关于tcp与线程结合的主要内容,如果未能解决你的问题,请参考以下文章

将 Dash 与 Alfred 结合起来

C中进程与线程的基本使用(结合代码讲解)

C中进程与线程的基本使用(结合代码讲解)

Motan在服务provider端用于处理request的线程池

异常和TCP通讯

Python 多处理与多线程相结合