Python 通过套接字发送文件
我在将数据作为文件从套接字的一端发送到另一端时遇到问题。发生的情况是,服务器和客户机都试图读取该文件,因此该文件永远不会被发送。我想知道在服务器读取完从客户端发送的文件之前,如何阻止客户端 我使用send和recv处理原始数据包,但我认为这是一个更干净的解决方案 客户端:Python 通过套接字发送文件,python,sockets,Python,Sockets,我在将数据作为文件从套接字的一端发送到另一端时遇到问题。发生的情况是,服务器和客户机都试图读取该文件,因此该文件永远不会被发送。我想知道在服务器读取完从客户端发送的文件之前,如何阻止客户端 我使用send和recv处理原始数据包,但我认为这是一个更干净的解决方案 客户端: 连接到服务器创建套接字连接 在套接字上创建文件并发送数据 等待来自服务器的文件 服务器: 等待来自客户端的文件 完成交互操作: 客户端向服务器发送数据 服务器向客户端发送数据 编辑 我实际上看到的代码是在这个问题中发布的,但我
下面是仅使用Python套接字的问题,因此我想我应该简化问题并只询问核心套接字问题…我不确定问题是否清楚,您是否在问:
如果问题是#3,也许你可以提供更多的细节。我不太清楚你在问什么,但也许你正在寻找
选择
听起来您让客户端发送文件,然后等待服务器响应,但如果您没有向服务器指示它已完全读取文件,服务器端的recv()将挂起等待更多数据。一旦客户端完成发送,就可以在客户端调用shutdown(shutdown_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()
第二种选择。出于某种原因,你所描述的是我正在做的事情,它不起作用。阅读的协调性是我想弄明白的。。。