* исправили это !! решение отредактировано до части кода * Я пытаюсь создать простой python3 сервер TCP / IP с сокетами. Я хочу, чтобы клиент набрал имя файла, который находится на сервере. и сервер отправит его клиенту, если он существует. Мне удалось это сделать, но я не могу сказать на стороне клиента, что файл окончен. Я имею в виду, я не могу сказать, получил ли я все с сервера. Я хочу отправить имя файла с клиента на сервер. (Мне удалось это сделать), затем прочитайте файл и отправьте его содержимое клиенту (мне удалось это сделать), затем я хочу со стороны клиента получить содержимое и записать его в новый файл. (Что я не смог сделать.) Ожидаемый результат: получить полное содержимое файла с сервера, а затем записать его в новый файл на стороне клиента. мой сервер:
import socket
import concurrent.futures
from threading import *
import os
host = 'localhost'
port = 3300
myServeriao = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
myServeriao.bind((host,port))
def getFileContent(fileName):
try:
file = open(fileName,"rb")
content = file.read()
file.close()
return content
except FileNotFoundError:
return "File Not Found."
while True:
myServeriao.listen(5)
con,addr = myServeriao.accept()
fileName = con.recv(1024)
with concurrent.futures.ThreadPoolExecutor() as executor:
futureExecutor = executor.submit(getFileContent, fileName)
returnedValue = futureExecutor.result()
content = returnedValue.decode()
#the content type is string. that's why i converted it to bytes.
con.send(bytes(content,'utf-8'))
con.close()
мой клиент:
import socket
import pickle
def writeAsnwerToFile(content):
answerFile = open("newFile.html", "wb")
pickle.dump(content,answerFile)
answerFile.close()
clientSocket = socket.socket()
clientSocket.connect(("localhost",3300))
fileName = input("Enter the file name: ")
clientSocket.send(bytes(fileName,'utf-8'))
fullmsg = ''
while True:
msg = clientSocket.recv(8)
if len(msg) <= 0:
break
fullmsg += msg.decode('utf-8',errors='ignore')
writeAsnwerToFile(fullmsg,newFileName)
clientSocket.close()