2013-05-09 75 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