简单的实现UDP协议:
server.py
from socket import * # socket模块,因为经常用很多次,所以推荐全部导入,这样可以少写很多socket.socket
# 生成套接字对象
server = socket(AF_INET, SOCK_DGRAM) # AF_INET是网络类型家族(基于网络通信),stream是流的意思,即TCP协议(流式协议)
#2 绑定IP和端口
server.bind(('127.0.0.1', 8080)) # 以元组的形式传入 服务端IP 和 接收端口
# server.listen(5) # UDP没有连接,所以不需要listen
# conn, client_addr = server.accept() # UDP没有连接,所以不需要等待连接
#3 收,发消息(传数据)
while True:
data, client_addr = server.recvfrom(1024) # UDP使用recvfrom(),接收的参数是两个。
print(data)
server.sendto(data.upper(), client_addr) # 发给客户端
server.close()
client.py
from socket import *
client = socket(AF_INET, SOCK_DGRAM)
while True:
msg = input('>>> :').strip()
client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080)) # 因为UDP没有连接,所以直接指定内容和服务器ip&端口来发送。
# sendto(bytes类型data,元组类型服务器IP&端口)
# if not msg: continue # TCP中不能发空数据,而UDP数据即使为空,因为自带报头(数据报协议),所以可以发送。
# UDP协议必须发送和接受是1对1的,即一个sendto对应一个recvfrom。(数据报是完整的数据)
# UDP不会粘包
# UDP中,一次发送的数据超过对方一次接收的上限,超出部分会丢失。(windows会报错)
data, server_addr = client.recvfrom(1024)
print(data, server_addr)
client.close()
原文:https://www.cnblogs.com/py-xiaoqiang/p/11299021.html