这大部分已得到回复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()
代码工作正常,没有添加反馈行(如上面的链接),是否有人知道如何保持这与反馈一起工作? 感谢。
答案 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()