试了几个txt文件,想到应该是tcp把我的文件内容分组发送了,导致如果用'wb'模式就会覆盖前一段分组的内容,请问除了用'ab'还有什么办法解决吗
#服务器程序:from socket import *serverPort = 9999serverSocket = socket(AF_INET,SOCK_STREAM)serverSocket.bind(('', serverPort))serverSocket.listen(1)while True: connectionSocket,addr = serverSocket.accept() print('Waiting for connection...') try: data = connectionSocket.recv(2048) print(data) if not data: continue file_name = data.split()[1] print(file_name[1:]) f = open(file_name[1:], encoding='utf-8') outputdata = f.read() header = 'HTTP1.1 200 OK' connectionSocket.send(header.encode('utf-8')) for i in range(0,len(outputdata)): connectionSocket.send(outputdata[i].encode('utf-8')) connectionSocket.close() except IOError: header = 'HTTP1.1 404 NOT FOUND' connectionSocket.send(header.encode('utf-8')) connectionSocket.close()
#客户程序from socket import *serverName = 'LAPTOP-VIGVQ6Q7'serverPort = 9999clientSocket = socket(AF_INET,SOCK_STREAM)clientSocket.connect(('10.131.184.238',serverPort))while True: Head = '''GET /test.txt HTTP/1.1''' clientSocket.send(Head.encode()) data = clientSocket.recv(2048) print(data) with open('response.html','wb') as f: f.write(data)
如题:如果保留服务器程序的connectionSocket.close( ),客户端报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
如果删除connectionSocket.close( ),就可以请求到需要的文件,但是客户端会不停发送报文