根据客户端发送给服务器的信息,我有以下代码应该将文件发送到客户端。客户端将发送特定名称的应用程序请求。服务器将获取文件并将其发送到客户端。问题是服务器发送以下消息:
Not a heartbeat
No valid Message
App request Done
Done Sending Files
但客户端正在监听文件,即使服务器已完成发送文件。
我的代码中出错了什么?
答案 0 :(得分:1)
您可以通过在发送文件内容之前发送文件的总长度来实现此目的。 并先获得长度并阅读该长度
可行的代码段位于
之下ON服务器端(server.py)
try:
if data["app"]:
print "App request Done"
file_len = os.stat("test_app.dll").st_size
print data["app"]
first_flag = True
with open("test_app.dll", "rb") as ff:
l = ff.read(2000)
while(l):
if first_flag:
conn.send("test_app"+"#"+str(file_len)+"#"+l)
first_flag = False
else:
conn.send(l)
l = ff.read(2000)
print "Done Sending Files"
except Exception, e:
print "Not a APP Request:", e
在客户端:
while True:
print "Sending App Request"
s.sendall("{'app':'windows_process_monitor', 'platform':'windows'}")
print "Receiving Files"
first_flag = True
with open("windows_process_monitor.dll", "wb") as dd:
app_len = 0
remaining_part_len = 0
while(True):
data = s.recv(1024)
print data
if not data:
break
if first_flag:
app_name, app_len_str, first_part_content = data.split("#", 2)
app_len += int(app_len_str)
remaining_part_len += app_len
first_received_len = len(first_part_content)
dd.write(first_part_content)
first_flag = False
if app_len <= first_received_len:
print "all received"
break
remaining_part_len -= first_received_len
else:
dd.write(data)
remaining_part_len -= 1024
if remaining_part_len <= 0:
break
print "inside while"
print "Received ", repr(data)
break