【发布时间】:2022-01-25 17:17:18
【问题描述】:
我有一个bytearray。我用len 检查了它的大小,它是 15.000 字节。但是,当通过s.send()(其中s 是一个套接字)发送时,只发送了6000 个字节。
这正常吗?对send 的下一次调用甚至不会发送其余的。
更多细节:即使使用 3 sendall 的 splittig 也不起作用:
s.sendall(fbytes[:5000])
s.sendall(fbytes[5000:10000])
s.sendall(fbytes[10000:])
【问题讨论】:
-
"下一次对
send的调用甚至不会发送其余的。"我们能看到那个代码吗? -
我会让有经验的人回答这个问题,但考虑到socket.send() 的文档特别提到应用程序负责发送所有数据,这可能是预期的行为。也许他们包含的HOWTO guide 可能会有所帮助?
-
@DanielWalker 代码太长而且很复杂,但是下一次调用 send 实际上会发送一个 10 字节的数组,例如 s.send(barr) 其中 barr 非常小
-
这个问题需要足够的代码来描述问题。它目前仅显示 OP 的解释,这种解释可能不够准确。甚至不清楚是使用 TCP 还是 UDP,尽管这在回答问题时会有所不同。也不清楚接收端是如何工作的,即错误可能(也)在那里。
-
@AaaBbb “代码太长太复杂”。然后将代码减少到仍然存在相同问题的minimal reproducible example 并发布。没有看到一些代码,我们只能猜测。您在下面评论
.sendall()是“不工作”,但它应该,所以向我们展示您在客户端和服务器上都在做什么。