有一个很长的清单。如何保证将其发送到服务器并取回?我已经尝试过对数据进行切片)对于客户端,使用变量 var = 8000,不会完整返回列表...
服务器代码:
import socketserver
class ThredingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
class EchoTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
def recvall(request):
BUFF_SIZE = 4096 # 4 KiB
data = b''
while True:
part = request.recv(BUFF_SIZE)
data += part
if len(part) < BUFF_SIZE:
break
return data
full_data = recvall(self.request)
print(f'Adress: {self.client_address[0]}')
print(f'Data: {len(full_data)} {full_data}')
# некая операция
#d = eval(full_data)
#d = d[::-1]
msg = str(full_data).encode()
self.request.sendall(msg)
if __name__ == '__main__':
with ThredingTCPServer(('', 8888), EchoTCPHandler) as server:
server.serve_forever()
客户端代码:
import socket
def recvall(sock):
BUFF_SIZE = 4096 # 4 KiB
data = b''
while True:
part = sock.recv(BUFF_SIZE)
data += part
if len(part) < BUFF_SIZE:
break
return data
var = 8000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 8888))
msg = str([i*i for i in range(var)]).encode()
sock.send(msg)
res = recvall(sock)
ans = res.decode()
print(len(ans), ans)
sock.close()
你的问题出在
改成
在这种情况下,将 BUFF_SIZE 减小到 256 对我有帮助。有了这个值,传输的列表(如果作为字符串)从 65495 增加到 1050000,这比原来的版本要好得多。