我正在尝试在python中使用UDP创建一个套接字。
代码非常简单明了
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(data_to_send, (host, port))
received_data = s.recvfrom(1024)我的问题是,sendto和recvfrom方法被阻塞了吗?也就是说,当我调用sentdo时,我的代码将停止并等待recvfrom,因为,我在本地主机上到处闲逛并测试客户端和服务器模型,并手动注入3秒和4秒的随机睡眠时间来模拟现实生活中的延迟,并且我将获得ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host,以防延迟有点高。
发布于 2018-03-02 21:03:02
这些调用可能会阻塞正在执行它们的线程。
如果您的操作系统内核的出站缓冲区已满,并且需要时间来容纳您想要发送的消息,则sendto将被阻塞。因为远程应用程序还没有调用recvfrom,所以sendto不会阻塞。
recvfrom会一直阻塞,直到有东西可以从你的操作系统内核的入站缓冲区中读取。如果远程对等方尚未发送任何内容或消息尚未到达,则recvfrom将阻止。
此外,可能在您这一端发生了一些错误的配置。ConnectionResetError可能会发生,因为某个地方有防火墙。延迟与问题无关,因为UDP没有连接和超时。
https://stackoverflow.com/questions/49023717
复制相似问题