Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7客户端服务器UDP通信,如何克服丢包?_Python_Python 2.7_Client Server - Fatal编程技术网

Python2.7客户端服务器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

我在本地主机上的服务器和客户端之间进行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 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,最终我找到了答案