Python2.7客户端服务器UDP通信,如何克服丢包?
我在本地主机上的服务器和客户端之间进行UDP通信 根据这一准则: 回声服务器:Python2.7客户端服务器UDP通信,如何克服丢包?,python,python-2.7,client-server,Python,Python 2.7,Client Server,我在本地主机上的服务器和客户端之间进行UDP通信 根据这一准则: 回声服务器: import socket import sys sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_address = ('127.0.0.1', 12321) sock.bind(server_address) while True: data, address = sock.recvfrom(4096) if d
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 12321)
sock.bind(server_address)
while True:
data, address = sock.recvfrom(4096)
if data:
sent = sock.sendto(data, address)
回送客户端
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 12321)
message = 'This is the message. It will be repeated.'
try:
for i in range 4:
sent = sock.sendto(message, server_address)
data, server = sock.recvfrom(4096)
finally:
sock.close()
现在假设我受到了一些攻击,一个特定的数据包没有到达服务器,客户端仍然在等待服务器的响应
我陷入了僵局
我如何克服这个问题?UDP套接字是否有超时参数?是的,UDP套接字有超时。请参阅中的socket.settimeout(),并大致阅读非阻塞套接字 请注意,UDP数据包可以被丢弃、复制和/或重新排序,即使中间没有人。这是因为UDP(按设计)是一种不可靠的数据报协议 如果您需要可靠的协议,请使用TCP(或QUIC)
如果您需要确保中间没有人可以修改或(可选)观察数据,请使用TLS(或QUIC)。谢谢您的评论,这是一个大学课程作业,所以他们要求UDP,最终我找到了答案