TCP是面向可靠連接的比搭,UDP是面向無連接的菌仁,也就是不需要建立連接就可以發(fā)送數(shù)據(jù)
服務(wù)器端
import socket
# 使用SOCKET_DGRAM:表示使用UDP
s = socket.socket(socket.AF_INET, socket.SOCKET_DGRAM)
# 只需要綁定地址和端口
s.bind(("127.0.0.1", 9999))
while True:
# 接收數(shù)據(jù)
data, addr = s.recvfrom(1024)
print ('Received from %s:%s.' % addr)
# 發(fā)送數(shù)據(jù)
s.sendto(b'Hello, %s!' % data, addr)
注意:
綁定端口和TCP一樣土童,但是不需要調(diào)用listen()方法同辣,而是直接接收來自任何客戶端的數(shù)據(jù)
recvfrom()方法返回數(shù)據(jù)和客戶端的地址與端口
服務(wù)器收到數(shù)據(jù)后,直接調(diào)用sendto()就可以把數(shù)據(jù)用UDP發(fā)給客戶端匀们。
客戶端
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b'Michael', b'Tracy', b'Sarah']:
# 發(fā)送數(shù)據(jù):
s.sendto(data, ('127.0.0.1', 9999))
# 接收數(shù)據(jù):
print(s.recv(1024).decode('utf-8'))
s.close()
注意:
首先仍然創(chuàng)建基于UDP的Socket缴淋,然后,不需要調(diào)用connect()泄朴,直接通過sendto()給服務(wù)器發(fā)數(shù)據(jù):
從服務(wù)器接收數(shù)據(jù)仍然調(diào)用recv()方法重抖。