gpt4 book ai didi

python - 如何在Python中的recv之前找出socket中有多少字节?

转载 作者:可可西里 更新时间:2023-11-01 02:57:42 26 4
gpt4 key购买 nike

我有一个 TCP 处理数据流。它一次需要 4096 个字节,但我需要一种方法在接收之前找出整个套接字的大小。这样我就可以确定在切换套接字之前套接字将被读取多少次。它还将通知这是该套接字的最后一次接收,以便我可以在选择切换到另一个可用套接字之前对其进行一些操作。

def handle_tcp(self, sock, remote):  
fdset = [sock, remote]
while True:
r, w, e = select.select(fdset, [], [])
# How to find out how much bytes need to be read from socket?
if sock in r:
non_blocking_calculation()
if remote.send(sock.recv(4096)) <= 0: break
if remote in r:
non_blocking_calculation()
if sock.send(remote.recv(4096)) <= 0: break

最佳答案

你先于我。按照 Igor Kalinosvkiy 的方式。您可以使用 FIONREAD 来执行此操作,也可以使用 MSG_PEEK 并继续阅读直到为空。例如,在 select() 之后。

import fcntl, termios, array, math
...
sock_size = array.array('i', [0]) # initialise outside While loop
if sock in r:
fcntl.ioctl(sock, termios.FIONREAD, sock_size)
count = ceil(sock_size[0] / float(BUF_SIZE))
print("Socket size: {} and count: {}".format(sock_size[0], count)

关于python - 如何在Python中的recv之前找出socket中有多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44736204/

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