Многопоточный сервер и последовательная передача — как решить проблему?

Здравствуйте.
Пишу клиент серверное приложение для передачи файлов по сети. Хотелось бы узнать как правильно оформить последовательный обмен данными, чтобы не приходилось постоянно посылать 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()
  • Вопрос задан
  • 3386 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы