Python套接字接收二进制数据

python sockets receive binary data

本文关键字:二进制 数据 套接字 Python      更新时间:2023-10-16

我在接收二进制数据到我的服务器(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 -线程函数'Handler'的一部分):

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)

这个问题来自我和几个朋友为我们的课程所做的特洛伊项目。谢谢。

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

我不知道ReadThisFile做什么,但是你需要把你想要发送的字节放入缓冲区,并使用缓冲区作为要发送的参数。顺便说一句,ReadFile可能至少和你想做的一样简单。好运。

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