-3

我无法将二进制数据接收到我的服务器(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)

这个问题来自我和几个朋友为我们的课程工作的特洛伊木马项目。谢谢。

4

1 回答 1

0

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

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

ReadThisFile 需要告诉您它读取了多少字节,或者您需要以另一种方式获取文件大小并推断缓冲区的长度

于 2013-05-09T17:22:33.400 回答