2013-05-09 50 views
-3

我在接收二进制数据到我的服务器(python)时遇到了麻烦。 看来,操作系统(WIN7)在没有“许可”的情况下在几个数据包中发送大数据,所以当我试图从客户端(C++)发送二进制数据时,我必须做一些操作来组合所有数据。 我尝试了几种方法,但都没有工作。python套接字接收二进制数据

这里是发送部分(C++ - 肯定的正常工作):

sendbuf = "[email protected]" + ReadThisFile("C:\\0x3z4.jpg") + "@"; // buffer should be "[email protected]<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) 

这问题来自Trojan项目,我和我的两位朋友正在为我们的课程工作。 谢谢。

+0

对不起的长度,你可以尝试改写这个?这不是很清楚。 – 2013-05-09 17:11:00

回答

0

您没有发送缓冲区,而是发送矢量的第一个vector.size()字节。在调试器中停止代码,检查从& vect [0]开始的内存,并将其与您实际收到的内容进行比较,我认为您会发现代码的行为正确(从某种意义上说,它正在执行它应该,不一定是你想要的)。

我不知道ReadThisFile是做什么的,但是您需要将要发送的字节实际放入缓冲区并将该缓冲区用作参数发送。 FWIW,ReadFile可能至少与你试图做的事情一样容易。祝你好运。

要么ReadThisFile需要告诉你它有多少字节读取,或者您需要获得文件大小的另一种方式,并推断缓冲

+0

ReadThisFile从文件中返回带有二进制数据的字符串。 我将收到的数据与发送的数据进行比较。两者都是一样的。 问题是如何仅保存我收到的特定二进制数据,直到数据结束(如何确定数据何时结束?)。 对不起,我很抱歉的解释。 – user2367115 2013-05-09 17:51:26