作者 | 无量测试之道 编辑 | 小 晴
1、主题
今天分享的内容是在上一篇文章“Python UDP 协议网络编程《一》”的基础上做了一些优化和改进:
- 客户端增加了可接收的功能
- 增加了多线程的处理功能
- 服务端增加可回复消息的功能
- 对接收消息进行验证的功能
2、Python 代码实现
client.py 代码如下:
代码语言:javascript复制 1import threading
2from socket import socket,AF_INET,SOCK_DGRAM
3udp_socket = socket(AF_INET, SOCK_DGRAM)#建议upd连接
4local_address = ('127.0.0.1', 8000)#定义了本机的ip and port
5udp_socket.bind(local_address)#绑定本机的ip and port
6
7def udp_secv_msg():
8 while 1:
9 udp_sockets = socket(AF_INET, SOCK_DGRAM) # 建立udp socker连接
10 server_address = ('127.0.0.1', 10000) # 定义了服务端的ip and port
11 udp_sockets.bind(server_address) # 服务端绑定ip and port
12 recv_data = udp_sockets.recvfrom(1024) # 收数据等待
13 print('接收的内容:', recv_data[0].decode('utf-8')) # 显示收到的信息
14 print('发送人的地址:', recv_data[1]) # 显示收到的信息
15 udp_sockets.close()
16
17def udp_send_msg():
18 while 1:#无限发送消息
19 resvice_address=('127.0.0.1',9000) #定义了接收消息机器的ip and port
20 data=input("<<<:")#接收键盘的输出信息
21 udp_socket.sendto(str(data).encode("utf-8"),resvice_address)#向接收消息机器发送消息
22 udp_socket.close()
23
24
25if __name__ == '__main__':
26 print("the client of ip:%s and port:%d is running"%(local_address))
27 t1=threading.Thread(target=udp_secv_msg)
28 t2=threading.Thread(target=udp_send_msg)
29 t1.start()
30 t2.start()
31 t1.join()
32 t1.join()
server.py 代码如下:
代码语言:javascript复制 1from socket import socket,AF_INET,SOCK_DGRAM
2local_address = ('127.0.0.1', 9000) # 定义本服务器的ip and port
3
4def recv_server():
5 udp_socket = socket(AF_INET, SOCK_DGRAM)#建立udp socker连接
6 udp_socket.bind(local_address)#服务端绑定ip and port
7 recv_data = udp_socket.recvfrom(1024)#收数据等待
8 print('接收的内容:', recv_data[0].decode('utf-8'))#显示收到的信息
9 print('发送人的地址:', recv_data[1])#显示收到的信息
10
11 msg=recv_data[0].decode('utf-8')
12 msg_length=len(msg.split(" "))
13 if(msg_length==2):
14 username=msg.split(" ")[0]
15 password=msg.split(" ")[1]
16 if (login(username, password)):
17 print("登录成功!!!")
18 data="回车后再输入:admin 123456 test,我可以给你惊喜!!!"
19 send_msg(data)
20 elif(msg_length==3):
21 username = msg.split(" ")[0]
22 password = msg.split(" ")[1]
23 message= msg.split(" ")[2]
24 if (login(username, password) and message == "test"):
25 data = "我骗了你,哈哈!!!" * 20
26 send_msg(data)
27 else:
28 pass
29
30def send_msg(data):
31 client_address = ('127.0.0.1', 7000) # 定义了本机的ip and port
32 server_address = ('127.0.0.1', 10000) # 定义了接收消息机器的ip and port
33 udp_sockets = socket(AF_INET, SOCK_DGRAM) # 建立udp socker连接
34 udp_sockets.bind(client_address) # 服务端绑定ip and port
35 udp_sockets.sendto(str(data).encode("utf-8"), server_address) # 向接收消息机器发送消息
36 udp_sockets.close()
37
38
39
40def login(username,password):
41 if(username=="admin" and password=="123456"):
42 return True
43 else:
44 return False
45
46if __name__ == '__main__':
47 print("the server ip:%s and the port:%d is running"%(local_address))
48 while True:
49 recv_server()
3、温馨提示
上面的代码需逐行阅读才能体会其中真正的精髓,建议理解后在本地进行实操,可有助于更好的理解今天分享的内容,记得在学习今天的内容之前,先学习上一篇文章“Python UDP 协议网络编程《一》”。