Возник вопрос при организации многопоточного приложения в работе с сокетами. Имеется сервер, который слушает сокет и при подключении клиента создает на стороне сервера объект клиента (отдельной нити естесно). Этот объект начинает самостоятельно отслеживать сокет соединение.
Вот выдержки из кода:
def run(self):
“старт объекта клиента”
while 1:
data = self.get()
if data:
self._appManager.InvokeApp(data)
def get(self):
“слушаем клиента и принимаем от него данные”
data = ‘'
try:
while 1:
zipData = self._data_socket.recv(4)
if zipData == ’' :
break
data = data+zipData
except:
self._logger.critical('Error while recieving package from client')
self.__del__()
self._logger.info('Get data complete succesful')
return pickle.loads(zlib.decompress(data))
проблемы возникают в методе get в цикле который принимает данные. После того как пакет полностью передался, выход из цикла не происходит, а просто recv ожидает следующего пакета. В доке http://www.amk.ca/python/howto/sockets/ сказано, что для решения этой проблемы необходимо передавать длину пакета. Но возможно существуют иные методы решения?