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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

Python UDP 协议网络编程《二》_服务端

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