Создание клиента и сервера с помощью сокета 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
не могли бы вы объяснить подробнее?