在python套接字中发送和接收文件

时间:2015-10-27 14:52:21

标签: python sockets

这大部分已得到回复here 我一直在尝试在收到整个文件时修改服务器(发送)和客户端(接收)来自服务器的反馈。

下面是客户端服务器代码;因为它目前都是客户端和服务器挂起。即。不知不觉地进入忙碌的"状态(客户端和服务器都不执行任何操作,直到服务器上的ctrl-c在此处报告失败" l = sc.recv(1024)"并且客户端上的ctrl-c在此处报告失败"回复= s.recv(1024)&#34)

import socket
import sys
s = socket.socket()
s.bind(("localhost",3000))
s.listen(10)
i=1
while True:
    sc, address = s.accept()
    print address
    f = open('tranmit.jpg",'wb') #open in binary
    l = 1
    while(l):
        l = sc.recv(1024)
        while (l):
            f.write(l)
            l = sc.recv(1024)
        f.close()
        sc.send("received") # Would like to send back a response

    sc.close()

s.close()
------------------------------------------------------------
#client
s = socket.socket()
s.connect(("localhost",3000))
f=open ("tranmit.jpg", "rb") 
l = f.read(1024)
while (l):
    s.send(l)
    l = f.read(1024)
reply =s.recv(1024) # Feedback: would like the receive feedback from the server.
print reply
s.close()

代码工作正常,没有添加反馈行(如上面的链接),是否有人知道如何保持这与反馈一起工作? 感谢。

1 个答案:

答案 0 :(得分:0)

您的客户必须以某种方式指出整个文件已被发送。就目前而言,您的服务器无法知道客户端的发送操作何时完成。

一种解决方案是在所有传输完成后调用socket.shutdown。这是您的客户端程序的新版本。您的服务器程序不需要更换器。

#client
import socket
s = socket.socket()
s.connect(("localhost",3000))
f=open ("tranmit.jpg", "rb")
l = f.read(1024)
while (l):
    s.send(l)
    l = f.read(1024)
s.shutdown(socket.SHUT_WR)
reply =s.recv(1024) # Feedback: would like the receive feedback from the server.
print reply
s.close()