服务器端recv和发回客户端的数据:
import socketserver class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): def handle(self): try: data = b'' while True: package = self.request.recv(4096) if not package: break data = data + package self.request.sendall(data) except ConnectionError as conError: print(conError) class ThreadedTcpserver(socketserver.ThreadingMixIn,socketserver.Tcpserver): pass if __name__ == "__main__": HOST,PORT = "localhost",50007 print('Server start work!') server = ThreadedTcpserver((HOST,PORT),ThreadedTCPRequestHandler) ip,port = server.server_address try: server.serve_forever() except KeyboardInterrupt: print('Server stop by Keyboard Interrupt.')
def send_msg(data): import socket HOST = 'localhost' PORT = 50007 reply = '' try: with socket.socket(socket.AF_INET,socket.soCK_STREAM) as s: s.connect((HOST,PORT)) s.sendall(data) while True: data = s.recv(4096) if not data: break reply = reply+data.decode() except OSError as err: reply = err finally: return reply #some.txt is big txt file with open(r'some.txt','rb') as of: print(send_msg(of.read()))
但是在最后一块数据之后实现了这个“挂起”。 我的问题是,什么需要改变,那将获得所有的数据。
将列表(string)保存到应用程序/独立存储(Win8.1)
chrome是默认浏览器时,ShellExecute在Windows 8上不打开页面
如何指导创build一个uPNP iPhone应用程序?
易Facebook的Android
Docker错误在Windows 2016“Client.Timeout超过等待标题”
需要将maven的$ {project.basedir}从单个反斜杠转换为double
cudaEventRecord()在Visual Studio cpu代码上时间不正确
在Windows上,如何安装最低级别的全局键盘钩子?
为什么我的程序不能从Program Files目录运行,而是从其他地方运行?
我在发送数据大小的前10个字符中解决了以下问题,服务器端检查接收的数据,如果客户端发送的数据少,则继续接收数据。
所以你需要修改服务器端:
import socketserver class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): def handle(self): try: package = self.request.recv(4096) data_size = package[:10].strip(b'0') data = package[10:] while len(data) < int(data_size): package = self.request.recv(4096) if not package: break data = data + package self.request.sendall(data) except ConnectionError as conError: print(conError) class ThreadedTcpserver(socketserver.ThreadingMixIn,socketserver.Tcpserver): pass if __name__ == "__main__": HOST,50007 print('server start work!') server = ThreadedTcpserver((HOST,port = server.server_address try: server.serve_forever() except KeyboardInterrupt: print('server stop by Keyboard Interrupt.')
客户端:
def send_msg(data): import socket HOST = 'localhost' PORT = 50007 reply = '' try: with socket.socket(socket.AF_INET,PORT)) s.sendall(str(len(data)).encode().zfill(10)+data) while True: data = s.recv(4096) if not data: break reply = reply+data.decode() except OSError as err: reply = err finally: return reply #some.txt is big txt file with open(r'some.txt','rb') as of: print(send_msg(of.read()))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。