UDP编程
UDP是面向无连接的,意思是不需要服务端和客户端建立可靠的连接。TCP通信需要建立可靠连接。使用UDP协议时,只需要知道对方的IP地址和端口号,然后发送数据包,而不需要知道目的端是否接收成功,即不需要接收目的端的返回值。
UDP的传输方式比TCP快的多,对于可靠性要求不那么高的情况,可以使用UDP协议。
注意:绑定端口时候,TCP、UDP可以绑定同一个端口,如9999端口可以同时用于TCP、UDP协议的绑定。
UDP服务端创建:
UDP服务端的创建,分为三个步骤:
1. 创建Socket,绑定指定的IP和端口
2. 直接发送数据和接收数据
3. 关闭Socket
例子:UDP服务端
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('127.0.0.1',9999))print('绑定UDP端口 9999')while True:
data,addr = s.recvfrom((1024))
print('接收信息从 %s:%s.'%addr)
print('data:',data)
s.sendto(b'serverHello,%s!'%data,addr)
UDP客户端创建
1. 创建socket
2. 与服务端进行数据交换
3. 关闭socket服务
例子:
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)for data in [b'clientHello',b'clientworld']:
s.sendto(data,('127.0.0.1',9999))
print(s.recv(1024).decode('utf-8'))
s.close()
结果:服务端输出
客户端输出
例子2:服务端不改动,把客户端的recv方法改成recv_from方法:
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)for data in [b'clientHello',b'clientworld']:
s.sendto(data,('127.0.0.1',9999))
print(s.recvfrom(1024))
s.close()
结果:
服务端
客户端