客户端服务器上的Python TCP文件传输

时间:2015-01-14 18:13:47

标签: python python-2.7 tcp

根据客户端发送给服务器的信息,我有以下代码应该将文件发送到客户端。客户端将发送特定名称的应用程序请求。服务器将获取文件并将其发送到客户端。问题是服务器发送以下消息:

Not a heartbeat
No valid Message
App request Done
Done Sending Files

但客户端正在监听文件,即使服务器已完成发送文件。

服务器代码为here。客户端代码为here

我的代码中出错了什么?

1 个答案:

答案 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