Скрипт зависает при получении данных из сокета - PullRequest
1 голос
/ 01 мая 2019

Это мой скрипт на Python для получения данных от клиента:

import time
import socket

HOST = ''
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created')

try:
    s.bind((HOST, PORT))
except socket.error as socketError:
    print('socket binding failed, ', socketError)
    print('Exiting...')
    sys.exit(0)

print('Socket binding complete')

s.listen(1)
print('Socket listening for connection...')

conn, addr = s.accept()

print('connected to ', addr[0])

bfr = b''
try:
    while True:
        while True:
            temp = conn.recv(1024)
            print('temp is ',temp.decode('utf-8'))
            print('buffer value ', bfr.decode('utf8'))
            if not temp:
                break
            bfr += temp;
        data = bfr.decode('utf-8')
        bfr = b''
        print('value received,', data)
        if data == 'Connection-Ready to receive commands':
            print('')
        #other conditions
except Exception as loopException:
    print("Exception occurred in loop, exiting...")
finally:
    s.close()

скрипт зависает после печати connected to 192.168.4.197 и не принимает никаких команд от клиента. если клиент отключается, все команды отправляются на печать.

Кто-нибудь знает, почему он так себя ведет? Пожалуйста, спросите, если вам нужно больше деталей

Обновление 1

Попытался удалить внутреннее время while и добавил time.sleep(.10), и скрипт не зависает, но только первая команда печатает как есть, а остальные печатают с переводом строки после первого символа, например, если я отправлю 10, он сначала напечатает 1, а 0 в другой строке. Все, что я хочу - это получать команды, отправленные клиентом, каждая команда состоит из одного слова.

1 Ответ

0 голосов
/ 01 мая 2019

Возможно, попробуйте sendall, чтобы убедиться, что данные полностью отправляются с клиента?

...