基于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并没有实现并发。

posted on 2017-12-03 19:01  云烟||成雨  阅读(691)  评论(0编辑  收藏  举报