python套接字接收二进制数据
Posted
技术标签:
【中文标题】python套接字接收二进制数据【英文标题】:python sockets receive binary data 【发布时间】:2013-05-09 16:50:28 【问题描述】:我无法将二进制数据接收到我的服务器 (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 - 线程函数“处理程序”的一部分):
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)
这个问题来自我和几个朋友为我们的课程工作的 *** 项目。 谢谢。
【问题讨论】:
对不起,你能改写吗?不是很清楚。 【参考方案1】:您不是在发送缓冲区,而是在发送向量的第一个 vector.size() 字节。在调试器中停止代码,检查从 &vect[0] 开始的内存,并将其与您实际接收的内容进行比较,我认为您会发现您的代码行为正确(从某种意义上说,它正在做它正在做的事情)应该,不一定是你想要的)。
我不知道 ReadThisFile 做了什么,但是您需要将要发送的字节实际放入缓冲区中,并将该缓冲区用作要发送的参数。 FWIW,ReadFile 可能至少与您尝试做的事情一样容易。祝你好运。
ReadThisFile 需要告诉你它读取了多少字节,或者你需要以另一种方式获取文件大小并推断缓冲区的长度
【讨论】:
ReadThisFile 从文件中返回带有二进制数据的字符串。我将接收到的数据与发送的数据进行了比较。两者都是一样的。问题是如何只保存我收到的特定二进制数据,直到数据结束(如何找出数据何时结束?)。我很抱歉解释不好。以上是关于python套接字接收二进制数据的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 使用原始套接字发送和接收带有ICMP协议的OUTPUT的数据包的小程序是六进制格式的数据包。可以打印为%c来查看数据。 IP heade