1、主题
今天分享的内容是在上一篇文章“Python UDP 协议网络编程《一》”的基础上做了一些优化和改进:
-
客户端增加了可接收的功能
-
增加了多线程的处理功能
-
服务端增加可回复消息的功能
-
对接收消息进行验证的功能
2、Python 代码实现
client.py 代码如下:
1 import threading 2 from socket import socket,AF_INET,SOCK_DGRAM 3 udp_socket = socket(AF_INET, SOCK_DGRAM)#建议upd连接 4 local_address = ('127.0.0.1', 8000)#定义了本机的ip and port 5 udp_socket.bind(local_address)#绑定本机的ip and port 6 7 def 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 17 def 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 25 if __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 代码如下:
1 from socket import socket,AF_INET,SOCK_DGRAM 2 local_address = ('127.0.0.1', 9000) # 定义本服务器的ip and port 3 4 def 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 30 def 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 40 def login(username,password): 41 if(username=="admin" and password=="123456"): 42 return True 43 else: 44 return False 45 46 if __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 协议网络编程《一》”。
欢迎关注【无量测试之道】公众号,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!