gpt4 book ai didi

python - 避免在udp套接字中积累数据或从udp套接字读取最新数据

转载 作者:行者123 更新时间:2023-12-03 12:02:35 25 4
gpt4 key购买 nike

我试图将数据从C++代码连续发送到python代码。我使用udp套接字发送数据。发送速率比接收速率快,因为它是一个简单的传感器代码。因此,发送的数据将累积在套接字中。当我尝试读取数据时,它将返回旧数据。发送新数据时,如何从套接字读取最新数据或删除旧数据?

最佳答案

How can I read the newest data from the socket or delete the old datawhen the new data is sent?


从套接字读取数据包并将其放入缓冲区。继续从套接字读取数据包,每次将每个数据包放入缓冲区(替换以前缓冲区中的任何数据包数据),直到没有更多的数据可读取为止-非阻塞I/O模式对于这是因为,当套接字的传入数据缓冲区中的数据用完时,无阻塞的 recv()会引发代码为 EWOULDBLOCK的socket.error异常。读取所有数据后,缓冲区中剩下的都是最新数据,因此请继续使用该数据。
草图/示例代码如下(未经测试,可能包含错误):
  sock = socket.socket(family, socket.SOCK_DGRAM)

[... bind socket, etc... ]

# Receive-UDP-data event-loop begins here
sock.setblocking(False)
while True:
newestData = None

keepReceiving = True
while keepReceiving:
try:
data, fromAddr = sock.recvfrom(2048)
if data:
newestData = data
except socket.error as why:
if why.args[0] == EWOULDBLOCK:
keepReceiving = False
else:
raise why

if (newestData):
# code to handle/parse (newestData) here

关于python - 避免在udp套接字中积累数据或从udp套接字读取最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62648835/

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