gpt4 book ai didi

tcp - Python socket sendall 随机失败

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

我有一个简单的脚本,可以将图像文件从一台机器传输到另一台机器,进行图像处理并将结果返回为“骰子计数”。问题是随机收到的图像是部分灰色的。似乎没有关于传输何时未完成的原因,我在代码中看不到其他问题。客户端没有给出任何错误或任何表明 sendall 失败或不完整的指示。谢谢大家。

enter image description here

服务器代码:

def reciveImage():
#create local buffer file
fo = open("C:/foo.jpg", "wb")
print "inside reciveImage"
while True:
print "inside loop"
data = client.recv(4096)
print "data length: ", len(data)
fo.write(data)
print "data written"
if (len(data) < 4096):
break
print "break"
fo.close()
print "Image received"

和(简化的)客户端代码:

data = open("/home/nao/recordings/cameras/image1.jpg", "rb")    
# prepare to send data
binary_data = data.read()
data.close()

sock.sendall(binary_data)

正常的服务器输出:

Client Command: findBlob. Requesting image...
inside reciveImage
inside loop
data length: 4096
data written
#... This happens a bunch of times....
inside loop
data length: 4096
data written
inside loop
data length: 1861
data written
Image received
dice count: 0
Waiting for a connection

但随机它只会循环几次或更少,例如:

Client Command: findBlob. Requesting image...
inside reciveImage
inside loop
data length: 1448
data written
Image received
dice count: 0
Waiting for a connection

最佳答案

recv 在接收到所有数据之前不会阻塞,它只会阻塞直到接收到一些数据并返回它们。例如。如果客户端先发送 512 个字节,然后再发送另一个 512 字节,即使您请求 4096,您的 recv 也会返回前 512 个字节。因此,您应该只在 recv 返回时中断,因为没有更多数据可用(连接已关闭) .

关于tcp - Python socket sendall 随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370718/

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