基于UDP协议的socket编程
UDP协议特点:
1.无连接。服务端与客户端传输数据之前不需要进行连接,且没有超时重发等机制,只是把数据通过网络发送出去。也正是因为此特点,所以基于UDP协议的socket的客户端在启动之前不需要先启动服务端。
2.不可靠。数据在本地通过网络发出之后,UDP协议会立即清除本地的缓存,即使对方没有收到该数据,也不做任何补救措施。
3.数据报协议。
代码示例:
1 import socket 2 server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 3 ''' 4 1.UDP协议是数据报协议,因此不会产生字节流,不像TCP一样是字节流协议,故不会发生粘包现象。 5 2.UDP不稳定的原因为:udp在把数据和地址+端口发出去之后,会立即清除缓存,而且没有确认信息,因此不安全。 6 3.UDP协议对应一发一收,因此不像TCP那样要把连接挂起,更不用监听,只要始终处于接收客户端即可。 7 ''' 8 ip_port = ('127.0.0.1',8899) 9 server.bind(ip_port) 10 while True: 11 data_bytes,client_addr = server.recvfrom(1024) 12 server.sendto(data_bytes,client_addr)
1 import socket 2 client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 3 ip_port = ('127.0.0.1',8899) 4 while True: 5 msg=input('>>>:') 6 client.sendto(msg.encode('utf-8'),ip_port) 7 data_bytes,server_addr = client.recvfrom(1024) 8 print(data_bytes.decode('utf-8'))
注意:
基于UDP协议的客户端可以开启多个进程,表面上实现了并发,但同一时刻只能允许一个客户端与服务端通信,因此基于UDP协议的socket并没有实现并发。
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下"推荐"按钮,本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接,谢谢。