-3

サーバー (python) へのバイナリ データの受信に問題があります。OS (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)

この質問は、私と数人の友人が私たちのコースで取り組んでいるトロイの木馬プロジェクトからのものです。ありがとう。

4

1 に答える 1

0

バッファを送信しているのではなく、ベクトルの最初の vector.size() バイトを送信しています。デバッガーでコードを停止し、&vect[0] から始まるメモリを調べて、実際に受け取っているものと比較すると、コードが正しく動作していることがわかると思います (コードが本来の動作をしているという意味で)。する必要がありますが、必ずしもあなたが望むものではありません)。

ReadThisFile が何をするのかはわかりませんが、実際に送信したいバイトをバッファーに入れ、そのバッファーを送信する引数として使用する必要があります。FWIW、ReadFileはおそらく、あなたがやろうとしているように見えるものと同じくらい簡単でしょう。幸運を。

ReadThisFile が読み取ったバイト数を通知する必要があるか、別の方法でファイルサイズを取得してバッファの長さを推定する必要があります

于 2013-05-09T17:22:33.400 に答える