python2.7客户端服务器UDP通信,如何克服丢包?

2024-04-18 21:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在本地主机上的服务器和客户端之间有UDP通信 根据这一准则: https://pymotw.com/2/socket/udp.html

回音服务器:

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()

现在假设我受到一些MITM攻击,一个特定的数据包没有到达服务器,客户端仍然在等待服务器的响应

我陷入了僵局。你知道吗

我如何克服这个问题?UDP套接字是否有超时参数?


Tags: import服务器客户端messagedataserveraddresssys
1条回答
网友
1楼 · 发布于 2024-04-18 21:17:45

是的,UDP套接字超时。看到了吗socket.settimeout设置超时()在https://docs.python.org/2/library/socket.html中,并且通常读取非阻塞套接字。你知道吗

注意,即使没有中间人攻击者,UDP数据包也可以被丢弃、复制和/或重新排序。这是因为UDP(按设计)是一种不可靠的数据报协议。你知道吗

如果您需要可靠的协议,请使用TCP(或QUIC)。你知道吗

如果您需要确保中间没有人可以修改或(可选)观察数据,请使用TLS(或QUIC)。你知道吗

相关问题 更多 >