amir78 Ответов: 0

Создание клиента и сервера с помощью сокета Python


я пытаюсь сделать сервер и клиент который отправляет файл от клиента к серверу и сервер сохраняет его на жесткий диск затем сервер запрашивает другой файл и если ответ клиента да то клиент отправляет второй файл затем сервер снова сохраняет его и если ответ клиента нет сервер закрывает сокет когда я запускаю этот код первый файл отправляется на жесткий диск
и получил успешно, но после этого и сервер, и клиент зависают, и ничего не происходит, что с ним не так и как я могу это исправить?

Что я уже пробовал:

мой серверный код:

import socket

host = 'localhost'

port = 4444

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((host, port))

s.listen(5) 

(client, (ip, port))=s.accept()


while True:

    data = "".join(iter(lambda: client.recv(1), "\n"))

with open('filehere.txt', 'w') as file:



    for item in data:

        file.write("%s" % item)

    if not data: break


client.send("is there any other file?")

d = client.recv(2048)

if d == "yes":

    while True:

        data = "".join(iter(lambda: client.recv(1), "\n")

        with open('filehere1.txt', 'w') as file:

             for item in data:

                 file.write("%s" % item)

        if not data: break

        s.close()

else:

    s.close()


мой клиентский код:

import socket

host = 'locahost'

port = 4444

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host, port))


f = open('myfile.txt', 'rb')

l = f.read()

while True:

    for line in l:

        s.send(line)

    break

f.close()

d = s.recv(2048)

a = raw_input(d)


if a == "yes":

    s.send("yes")

    f = open('myfile1', 'rb')

    l = f.read()

    while True:

        for line in l:

            s.send(line)
        break

    f.close()

else:

    s.close()

Richard MacCutchan

Вполне возможно, что оба конца путаются в том, какой из них должен отправить следующее сообщение, поэтому каждый из них ждет ответа от сверстника.

amir78

что я должен сделать, чтобы решить эту проблему?у вас есть какие-нибудь предложения?

Richard MacCutchan

Вам нужно, чтобы клиент отправлял информацию с каждым сообщением, чтобы сообщить серверу, является ли это последнее сообщение или нет.

amir78

не могли бы вы объяснить подробнее?

0 Ответов