UDP通讯
UDP也是工作在传输层上的一种协议,但是与TCP相比,UDP本身采用的是不安全的 连接,所以来讲每一次通过UDP发送的数据不一定可以接收到,但是由于其性能比较好,所以未来会有比较广阔的发展前景,在Python里面对于TCP或者UDP本身的实现结构差别不大,都是通过socket.socket类完成的,只需要设置一些参数即可将其设置为UDP(数据报协议)。
服务端代码
此时的UDP服务端与TCP最大的区别在于不再需要过多地考虑到数据稳定性的连接问题,所以也不再设置有具体的监听操作,在每一次接收到请求之后只需要获取客户端的原始地址,直接根据原路返回即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import socket SERVER_HOST = "localhost" SERVER_PORT = 8080 def main(): with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as server_socket: server_socket.bind((SERVER_HOST,SERVER_PORT)) print("【服务端】服务器启动完毕,在“%s”端口上监听,等待客户端连接...." % SERVER_PORT) while True: data,addr = server_socket.recvfrom(30) print("[服务端]客户端连接到服务器端,客户端的地址为:%s、连接端口:%s" % addr) echo_data = ("【ECHO】%s" % data.decode("UTF-8")).encode("UTF-8") server_socket.sendto(echo_data,addr) if __name__ == "__main__": main()
|
客户端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import socket SERVER_HOST = "localhost" SERVER_PORT = 8080 def main(): with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as client_socket: while True: input_data = input("请输入要发送的数据(输入空结束):") if input_data: client_socket.sendto(input_data.encode("UTF-8"),(SERVER_HOST,SERVER_PORT)) echo_data = client_socket.recv(100).decode("UTF-8") print("服务端响应数据:%s" % echo_data) else: break if __name__ == "__main__": main()
|
运行测试


通过程序的执行对比就可以非常清楚的发现,整个的UDP程序完全没有受到连接的控制,所以当前的程序可以得到较好的处理性能,同时对于客户端来讲直接进行发送即可。