如何告诉客户端 Python 中的服务器中不存在文件



我正在编写一个简单的客户端-服务器-简单应用程序,其中客户端向服务器请求某个文件。如果该文件存在,则服务器发送该文件及其大小;如果它不存在,那么服务器会向客户端发送一条消息,说找不到该文件。我在服务器中包含了异常,但我不知道如何在客户端中包含if子句:如果文件存在,则接收文件;否则,收到消息说它不存在。我想我在服务器端做到了这一点,但我真的不确定我该如何写这段代码来只打印消息";找不到文件";如果在服务器中找不到文件,则在客户端中

这是服务器端代码

import socket
import os
import sys
import pickle
def Main():
host = '127.0.0.1'
port = 8881
s = socket.socket()
s.bind((host,port))
print("Server", host, "waiting on port", port)
s.listen(1)
while True:
c, addr = s.accept()
print("Connected to: " + str(addr))
filename = ''
while True:
data = c.recv(1024).decode('utf-8')
if not data:
break
filename += data
print("File requested: " + filename)
if os.path.isfile(filename):
lista = []
myfile = os.path.getsize(filename)
size = ('File size: ',myfile,' bytes')
texto = ''
for i in size:
texto = texto + '{:>4}'.format(i)
print(texto)
lista.append(texto)
file_size = pickle.dumps(lista)
c.send(file_size)
file2send = open(filename, "rb")
c.send(file2send.read())
c.close()
else:
print("File not found")
msg = ('File not found')
s.send(msg.encode('utf-8'))

if __name__ == '__main__':
Main()

客户端:

import socket, os.path, datetime, sys, pickle
def Main():
host = '127.0.0.1'
port = 8881
s = socket.socket()
s.connect((host, port))
Filename = input("File name and extension: ")
s.send(Filename.encode('utf-8'))
s.shutdown(socket.SHUT_WR)
file_size = s.recv(1024)
lista = pickle.loads(file_size)
print(lista)
data = s.recv(1024).decode('utf-8')
print(data)
msg = s.recv(1024).decode('utf-8')
print(msg)
s.close()
if __name__ == '__main__':
Main()

在服务器中,您正在发送"找不到文件";消息发送到服务器套接字s,相反,您应该将其发送到客户端c,并且根据您的逻辑,您应该在关闭连接之前先发送消息长度,然后发送消息
请参阅下面的服务器代码。

服务器:

import socket
import os
import sys
import pickle
def Main():
host = '127.0.0.1'
port = 8881
s = socket.socket()
s.bind((host,port))
print("Server", host, "waiting on port", port)
s.listen(1)
while True:
c, addr = s.accept()
print("Connected to: " + str(addr))
filename = ''
while True:
data = c.recv(1024).decode('utf-8')
if not data:
break
filename += data
print("File requested: " + filename)
if os.path.isfile(filename):
lista = []
myfile = os.path.getsize(filename)
size = ('File size: ',myfile,' bytes')
texto = ''
for i in size:
texto = texto + '{:>4}'.format(i)
print(texto)
lista.append(texto)
file_size = pickle.dumps(lista)
c.send(file_size)
file2send = open(filename, "rb")
c.send(file2send.read())
c.close()
else:
print("File not found")
msg = ('File not found')
c.send(str(len(msg)).encode('utf-8'))
c.send(msg.encode('utf-8'))
c.close()

if __name__ == '__main__':
Main()

相关内容

最新更新