Здравствуйте.
Пишу клиент серверное приложение для передачи файлов по сети. Хотелось бы узнать как правильно оформить последовательный обмен данными, чтобы не приходилось постоянно посылать b'1' в ответ.
А также существует следующая проблема в таком сервере: он вроде бы многопоточный, но когда я одновременно с разных машин начинаю слать файлы, то он зависает и ничего не передаёт. т.е. некорректно работает ServerThread.
import socket
import threading
class ServerThread(threading.Thread):
def __init__(self, client, addr):
self.conn = client
self.ip = addr
threading.Thread.__init__(self)
def run(self):
if self.conn.recv(128).decode("utf-8") == "send_files":
self.conn.send(b'1')
print ('connected:', str(self.ip))
filename = self.conn.recv(128).decode("utf-8")
self.conn.send(b'1')
f = open(filename, "wb")
while True:
data = self.conn.recv(1024)
#осознаю, что здесь говнокод, как правильно определить передан ли файл полностью?:
try:
if data.decode('utf-8') == '[end]':
print("complete")
break
except:
print("err")
conn.send(b'1')
f.write(data)
f.close()
self.conn.close()
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 9090))
sock.listen(10)
while True:
conn, addr = sock.accept()
st = ServerThread(sock, addr)
st.setDaemon(True)
st.start()