Python套接字接收二进制数据
python sockets receive binary data
我在接收二进制数据到我的服务器(python)时遇到了麻烦。似乎是操作系统(WIN7)在未经"许可"的情况下将大数据分成几个包发送,因此,当我试图从我的客户端(c++)二进制数据发送,我必须做一些操作,将所有的数据组合。我试了几种方法,但都不起作用。
这是发送部分(c++ -工作正常):
sendbuf = "2011@" + ReadThisFile("C:\0x3z4.jpg") + "@"; // buffer should be "2011@<Image Data>@"
// ReadThisFile returns string with binary data from file
vector<char> vect(sendbuf.begin(), sendbuf.end()); // Vector with the image data
iResult = send( ConnectSocket, &vect[0], vect.size(), 0 ); // Sending The Image
这里是接收部分(Python -线程函数'Handler'的一部分):
while True:
Buffer = Sock.recv(self.BufferSize)
if Buffer[0:4] == "2011":
self.Print(ADDR[0] + " > 2011 > Capture Screen Response.")
# Save Image
Path = datetime.now().strftime("Information\" + ADDR[0] + "@" + self.Clients[Index].computerName + "\CaptureScreen.Files\" + "%d-%m-%Y-%H-%M-%S.png")
f = open(Path,'wb')
f.write(Buffer[5:-1])
data = ""
# I tried to receive data till i'll find the eof
while True:
data += Sock.recv(4096)
if data.find("EOF"):
break
f.write(data)
这个问题来自我和几个朋友为我们的课程所做的特洛伊项目。谢谢。
您不是在发送缓冲区,而是在发送vector.size()的第一个字节。在调试器中停止代码,检查从&vect[0]开始的内存,并将其与您实际接收到的内存进行比较,我认为您会发现您的代码行为正确(在某种意义上,它正在做它应该做的事情,而不一定是您想要的)。
我不知道ReadThisFile做什么,但是你需要把你想要发送的字节放入缓冲区,并使用缓冲区作为要发送的参数。顺便说一句,ReadFile可能至少和你想做的一样简单。好运。
ReadThisFile需要告诉你它读取了多少字节,或者你需要通过另一种方式获得文件大小并推断缓冲区的长度
相关文章:
- 如何从dicom文件中读取二进制数据
- 如何在Qt中从数据库中检索二进制数据?
- readsome() 适合在 Windows 上读取二进制数据吗?
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 将包含二进制数据的 QByteArray 传递到按值运行
- 如何在 c++ 中生成十六进制二进制数据的 sha256 哈希?
- 在处理网络、二进制数据和序列化时应使用流或容器
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- 使用二进制数据更新 PostgreSQL 表
- 使用二进制数据和无符号字符
- sd_journal_send发送二进制数据.如何使用日志检索数据?
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 将文本和二进制数据连接到一个文件中
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 将整数的二进制数据转换为浮点数
- 使用 CMake 在可执行文件中嵌入二进制数据
- 二进制数据作为命令行参数
- 如何访问文件的二进制数据?
- 返回二进制数据的通用方式,而无需原始指针