使用Python发送图像
我对这个代码有一些问题。。。发送的不是整数图像,而是一些字节,有人可以帮助我吗?我想发送在文件夹中找到的所有图像。多谢各位 客户 服务器 参数to仅指定接收数据包的最大缓冲区大小,并不意味着将读取许多字节 所以如果你写:使用Python发送图像,python,image,sockets,Python,Image,Sockets,我对这个代码有一些问题。。。发送的不是整数图像,而是一些字节,有人可以帮助我吗?我想发送在文件夹中找到的所有图像。多谢各位 客户 服务器 参数to仅指定接收数据包的最大缓冲区大小,并不意味着将读取许多字节 所以如果你写: strng = sc.recv(int(size)) 你不一定会得到所有的内容,特别是如果大小相当大的话 您需要在循环中读取套接字,直到您实际读取了大小字节才能使其正常工作。要在单个套接字上传输文件序列,您需要某种方式来描述每个文件。实际上,您需要在套接字上运行一个小协议,该
strng = sc.recv(int(size))
你不一定会得到所有的内容,特别是如果大小
相当大的话
您需要在循环中读取套接字,直到您实际读取了
大小
字节才能使其正常工作。要在单个套接字上传输文件序列,您需要某种方式来描述每个文件。实际上,您需要在套接字上运行一个小协议,该协议允许您知道每个文件的元数据,例如其大小和名称,当然还有图像数据
看起来您正试图这样做,但发送方和接收方必须就协议达成一致
您的发件人中包含以下内容:
s.send(file) #send the name of the file
st = os.stat(sb+'\\'+file).st_size
s.send(str(st)) #send the size of the file
s.send(l)
接收者如何知道文件名的长度?或者,接收者如何知道文件名的结尾在哪里,以及文件的大小从哪里开始?您可以想象接收者获得一个类似于foobar.txt8somedata
的字符串,并推断文件名为foobar.txt
,该文件长8字节,包含数据somedata
您需要做的是使用某种类型的delimeter(如\n
)来分隔数据,以指示每段元数据的边界
您可以将数据包结构设想为\n\n
。然后,来自发射机的示例数据流可能如下所示:
foobar.txt\n8\nsomedata
然后,接收器将对传入流进行解码,在输入中查找\n
,以确定每个字段的值,如文件名和大小
另一种方法是为文件名和大小分配固定长度的字符串,然后是文件的数据。那么问题是什么,问题是什么?如何发送和接收图像的实际字节?。因为我想将图像复制到其他文件夹中,但函数os.stat或os.getsize不太好用。代码很简单,但我不明白为什么它不能准确地工作。那么,你有没有尝试过在谷歌上搜索“Python套接字发送文件”?你有没有发现任何错误或任何东西,告诉我们你的实际问题是什么?对不起,我如何做循环?在你的情况下,你可以做类似的事情。或者使用
socket.makefile
将其转换为类似文件的对象,该对象的read方法将阻塞到EOF。此外,只有当文件名的长度正好为5且文件大小为7位时,您的发送方式才有效。。。
s.send(file) #send the name of the file
st = os.stat(sb+'\\'+file).st_size
s.send(str(st)) #send the size of the file
s.send(l)
foobar.txt\n8\nsomedata