Python UDP 协议网络编程《二》

2022-07-04 19:50:42 浏览数 (1)

作者 | 无量测试之道 编辑 | 小 晴

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 协议网络编程《一》”。

0 人点赞