Необходимо залогиниться, считывать информацию и в зависимости от того, что присылает "железка" слать в ответ данные.
Т.к. данные приходят порциями и с интервалами я должен в цикле считывать до конца пакета. Проблема состоит в том, что когда в клиентском сокете вызывается два раза подряд функция recv() то программа зависает. Как можно обойти эту проблему (заставить клиентский сокет считывать recv() несколько раз подряд пока не закончится таймаут или данные)? Что самое интересное в серверном функция recv() работает отлично.
import socket,time
HOST = '192.168.10.99'
PORT = 23
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
#блок авторизации
sock.send("enter\n")
sock.send("login\n")
sock.send("password\n")
#конец блока авторизации
sock.send("status\n")
while 1:
bufsock=sock.recv(1024) # здесь зависает
if not bufsock:
break
print bufsock
time.sleep(0.2)
#я пробовал заменить цикл while() на несколько подряд идущих sock.recv() но проблема осталась
sock.send("logout\n")
sock.close()