试了几个txt文件,想到应该是tcp把我的文件内容分组发送了,导致如果用'wb'模式就会覆盖前一段分组的内容,请问除了用'ab'还有什么办法解决吗
#服务器程序:
from socket import *
serverPort = 9999
serverSocket = 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 = 9999
clientSocket = 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( ),就可以请求到需要的文件,但是客户端会不停发送报文
服务器端肯定不能关闭的,收发数据应该是由逻辑控制的。