我在接收二进制数据到服务器(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 - 线程函数'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)
这个问题来自木马项目,我和几个朋友为我们的课程工作。 感谢。
答案 0 :(得分:0)
您没有发送缓冲区,而是发送向量的第一个vector.size()字节。停止调试器中的代码,检查从&amp; vect [0]开始的内存,并将其与您实际接收的内容进行比较,我认为您会发现您的代码行为正确(从某种意义上说它正在执行它应该是什么,不一定是你想要的。)
我不知道ReadThisFile的功能,但是您需要将要发送的字节实际放入缓冲区并使用该缓冲区作为发送参数。 FWIW,ReadFile可能至少对你想要做的事情一样容易。祝你好运。
ReadThisFile需要告诉你它读取了多少字节,或者你需要以另一种方式获取文件大小并推断缓冲区的长度