gpt4 book ai didi

python:调用 socket.recvfrom() 两次

转载 作者:行者123 更新时间:2023-11-28 20:28:09 25 4
gpt4 key购买 nike

我正在编写两个 python 脚本,使用 python sockets 通过 UDP 进行通信。这是代码的相关部分

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((HOST, PORT))
s.setblocking(True) #I want it to be blocking
#(...)
(msg, addr) = sock.recvfrom(4)
#(...)
(msg2, addr2) = sock.recvfrom(2)

我希望接收是阻塞的,并且在读取第一个 4 字节部分之前我不知道整个消息的大小。上面的代码在 sock.recvrfom(2) 部分被阻塞,而修改后,使用一个 sock.recvfrom 而不是两个可以正常工作:

(msg, addr) = sock.recvfrom(6) #works ok, but isn't enough for my needs

知道如何方便地分两部分读取传入数据,或者为什么代码无法按预期工作吗?

最佳答案

socket.recvfrom(size) 将(对于 UDP 套接字)读取一个数据包,最多 size 字节。多余的数据被丢弃。如果你想接收整个数据包,你必须传递一个更大的 bufsize,然后按位处理数据包(而不是尝试按位接收它。)

如果您想要一个更方便、更灵活的网络 I/O 接口(interface),请考虑 Twisted .

关于python:调用 socket.recvfrom() 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com