今日主题:在Python TCP 协议网络编程《三》的基础上进行多线程的处理,可以让消息不断的发送不用等待回复后才可以继续发消息,同时也优化了服务端的代码,它主要是做消息的转发,实现多个客户端之间的消息互通。

 

具体实现代码如下:


server.py文件内容如下

 1from socket import socket,SOCK_STREAM,AF_INET #导入模块
 2from threading import Thread #导入线程包
 3
 4sockets=[] #用于存放所有请求过来的client的socket
 5
 6def tcp_server():
 7    tcp_server_socket=socket(AF_INET,SOCK_STREAM) #创建TCP服务端套接字对接,UDP是SOCK_DGRAM
 8    server_address=('127.0.0.1',9999)#定义本TCP服务端的ip and port
 9    tcp_server_socket.bind(server_address) #绑定本机的8888端口
10    tcp_server_socket.listen(128) #设置监听,并设置最大等待连接数为128
11
12 while 1:
13     print("i'm accepting")
14     client_socket, client_info = tcp_server_socket.accept() # 接收客户端的socker and info
15     print(client_socket,client_info)
16     sockets.append(client_socket)
17     t=Thread(target=get_msg,args=(client_socket,)) #开启线程来处理当前请求过来的client
18     t.start()
19
20def get_msg(client_socket):
21   while 1:
22       data=client_socket.recv(1024)
23       print("the data:",data)
24       if(len(data)>0):
25           for sk in sockets:
26               print(sk,data)
27               sk.send(data)
28
29
30if __name__ == '__main__':
31    print("the TCP server is running ...")
32    tcp_server()

 

client.py文件内容如下

 1from socket import socket,SOCK_STREAM,AF_INET #导入模块
 2from threading import Thread #导入线程包
 3import time
 4
 5tcp_client_socket = socket(AF_INET, SOCK_STREAM)  # 创建TCP客户端套接字对接
 6server_address = ('127.0.0.1', 9999)  # 定义本TCP服务端的ip and port
 7tcp_client_socket.connect(server_address)  # 连接到服务端
 8
 9def tcp_client():
10    thread1=Thread(target=read_msg,args=(tcp_client_socket,))
11    thread1.start()
12
13    thread2= Thread(target=send_msg, args=(tcp_client_socket,))
14    thread2.start()
15
16def send_msg(tcp_client_socket):
17    while 1:
18        message=input(">>>")
19        tcp_client_socket.send(message.encode("utf-8"))
20        time.sleep(1)#这里稍微等一下发送的消息返回,否则会看到输入>>>标识的错位
21
22def read_msg(tcp_client_socket):
23    while 1:
24        resv_data = tcp_client_socket.recv(1024)
25        print("the get of message is:",resv_data.decode("utf-8"))
26
27if __name__ == '__main__':
28    print("the TCP client is running ...")
29    tcp_client()

 

client console output内容如下

1the TCP client is running ...
2>>>good good study
3the get of message is: good good study
4>>>day day up
5the get of message is: day day up
6>>>

欢迎关注【无量测试之道】公众号,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、


文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

Python TCP 协议网络编程《四》_公众号

 添加关注,让我们一起共同成长!