Как я могу сказать, что я получил все данные из файла - PullRequest
0 голосов
/ 21 февраля 2020

* исправили это !! решение отредактировано до части кода * Я пытаюсь создать простой 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...