我正在研究Python客户端/服务器脚本。我遇到的一个问题是试图告诉服务器我已经完成了发送文件。这是我的逻辑的一步一步:
我遇到的问题是告诉服务器文件传输已完成。我发送EOF'但服务器并不了解它。当我发送文件名时,我将其发送为:
ClientSS.sendall(FileName.encode())
,服务器收到它:
FileName = ClientSS.recv(1024).decode()
这是有效的,与我用于发送EOF字符串的方法相同。 该文件是二进制的,所以我只做一个:
Data = File.read(1024)
HostSS.sendall(Data)
并在服务器端:
RawData = ClientSS.recv(1024)
这也很有效。但是,以下代码并没有(没有找到EOF):
while True: #receive file
try:
RawData = ClientSS.recv(1024)
except socket.error:
TimerCount += 1 #increment timer count
if TimerCount >= 5 : #waited 1/2 sec, no activity so error out
Ret = 'ERR_FILE_RECV'
break
continue
EOFData = ''
try:
EOFData = RawData.decode().strip()
except:
pass
if EOFData == 'EOF': #Rec'd a EOF so we're done with file
break
WriteFile.write(RawData) #write raw data to file
当我运行此代码时,文件将被传输并保存(与EOF字符串一起)。 EOF条件永远不会找到" EOF"。关于为什么上述代码片段没有捕获EOF的任何想法?
我用来发送文件的代码& EOF:
while True: #send the file
Data = File.read(1024)
if not Data: #hit EOF, no more data
break #Exit file send loop
HostSS.sendall(Data)
SendEOF = 'EOF'
HostSS.sendall(SendEOF.encode())