我正在尝试在python中使用UDP之间创建一个套接字。
代码非常简单
results
我的问题是,s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(data_to_send, (host, port))
received_data = s.recvfrom(1024)
和sendto
被阻止了吗?
也就是说,当我调用recvfrom
时,我的代码将停止并等待sentdo
,因为,我正在四处闲逛并在我的localhost上测试客户端和服务器模型,并手动注入3和4的随机休眠时间模拟现实生活延迟的秒数,如果延迟有点高,我得recvfrom
。
答案 0 :(得分:0)
这些调用可能阻止他们正在执行的线程。
如果操作系统内核的出站缓冲区已满, sendto
将阻止,并且需要时间才能容纳您愿意发送的消息。 sendto
因为远程应用程序尚未调用recvfrom
而无法阻止。
recvfrom
将阻塞,直到从操作系统内核的入站缓冲区中读取内容。如果远程对等方没有发送任何内容或邮件尚未到达,recvfrom
将阻止。
此外,您可能还会遇到一些错误配置。 ConnectionResetError
可能会发生,因为某处有防火墙。延迟与问题无关,因为UDP没有连接和超时。