2015-10-27 126 views
0

这大部分已经被回答了here 我一直试图在收到整个文件时修改服务器(发送)和客户端(接收)来自服务器的反馈。发送和接收python套接字中的文件

下面是客户端服务器代码;因为它目前都是客户端和服务器挂起的。即。无情地进入“忙碌”状态(客户端和服务器都不做任何事情,直到服务器上的ctrl-c报告失败为止“l = sc.recv(1024)”,并且客户端上的ctrl-c报告失败“reply = s。的recv(1024)“)

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

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

一种解决方案是在所有传输完成后调用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() 
+0

我想我可能会再次寻求类似这样你的帮助的东西,所以它正常工作与像来自服务器的响应串/文本,但“回复= s.recv(1024)”的客户端代码似乎无限期挂起当你在服务器端引入一个函数调用时,特别是如果函数花费60多秒来运行......任何想法?服务器完成运行函数调用并返回结果,而这个结果永远不会到达客户端进程。在此先感谢 – Ezra

+0

这听起来像是一个全新的问题。遵循[ask]和[mcve]中的指导原则,请在Stack Overflow上发布一个新问题。 –

相关问题