gpt4 book ai didi

python-3.x - 如何读取套接字缓冲区中的所有可用字节? Python3

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

我想读取缓冲区中的所有可用字节,下面的代码按100字节的块读取。

1)是否可以读取缓冲区中的所有字节?

2)sock.recv()的默认值是什么?//没有参数

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 1489)
sock.connect(server_address)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 8192) # Buffer size 8192
sock.setblocking(0) # set non-blocking

while 1:
read_ready = select.select([sock], [], [], timeout_in_seconds)
if read_ready[0]: # we have what to read
print('ready')
data = sock.recv(100)
if not data:
break
print(data)

UPD:
3)如果我设置sock.recv(1000000),它将读取所有缓冲区,对吗? (假设数据速度要慢得多)

主要目的是连续读取流

最佳答案

1) Is it possible to read all bytes are in the buffer?


recv不知道套接字缓冲区中有多少字节,或者在尝试从缓冲区中读取时可能到达多少字节。但是您可以在非阻塞套接字上使用 recv并进行读取,直到出现错误为止,因为没有更多数据可用(errno.EWOULDBLOCK)。或者,您可以在 select.select中使用零超时( 0,而不是 None)来仅检查(轮询)是否还有要读取的数据。

2) what is the default value of sock.recv()? // no argument



documentation for recv 明确说明了如何调用此函数:

socket.recv(bufsize[, flags])



因此, bufsize不在参数中,您可以跳过,并且尝试执行此操作将导致错误。

3) What if I set sock.recv(1000000), will it read all the buffer, right?



在给定的字节数下,它将仅读取 。实际上,它将读取多少还取决于底层内核套接字缓冲区的大小,即,即使客户端已经发送了数据,它也无法读取套接字缓冲区中尚未存在的任何数据。

如果套接字是SSL套接字,则存在另一个限制。在这种情况下, recv通常只会返回当前SSL帧中的数据。

关于python-3.x - 如何读取套接字缓冲区中的所有可用字节? Python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766187/

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