这听起来像你的客户端发送的文件,然后等待服务器的响应,但如果你不给服务器上的指示,它已经完全读取文件,的recv()服务器端将挂起等待更多数据。一旦客户端完成发送,您可以在客户端调用shutdown(SHUT_WR)。这会通知服务器,一旦它读取了所有发送的数据,就再也没有数据了。
一个非常基本的例子(发送一个数据blob到服务器,并且响应接收到一个数据blob):
服务器
>>> from socket import *
>>> s=socket()
>>> s.bind(('',8000))
>>> s.listen(1)
>>> c,a = s.accept() # will hang here until a client connects
>>> recvd=''
>>> while True:
... data = c.recv(1024)
... if not data: break # recv() will return '' only if the client calls shutdown(SHUT_WR) or close()
... recvd += data
...
>>> recvd
'a message'
>>> c.sendall('a response')
>>> c.close() # done with client, could loop back to accept here
>>> s.close() # done with server
客户
>>> from socket import *
>>> s=socket()
>>> s.connect(('localhost',8000))
>>> s.sendall('a message')
>>> s.shutdown(SHUT_WR) # tells server you're done sending, so recv won't wait for more
>>> recvd=''
>>> while True:
... data = s.recv(1024)
... if not data: break
... recvd += data
...
>>> recvd
'a response'
>>> s.close()
邮一些代码请? – 2010-05-26 16:50:24