Python сокет recv - PullRequest
       3

Python сокет recv

0 голосов
/ 17 июня 2019

Мне нужно реализовать простой сетевой протокол связи. Я использую Python 3.7. Программа работает в режиме "localhost". Тем не менее, в локальной сети это не работает хорошо. Я инициирую socket через socketserver.

Мне удается установить соединение, но иногда в recv программа просто зависает бесконечно. Ему удается передать несколько килобайт, но затем случайным образом блокирует все.

Режим блокировки установлен в true, поэтому я бы понял, если данные не были отправлены, но другая сторона отправила информацию. Так что же случилось? Информация не поступила? Или был удален по какой-то причине?

Есть ли надежный способ проверить, пришло ли сообщение (отправителем), и при необходимости повторно отправить данные?

def ReceiveRaw(self, msgLen):
    msgOut = bytearray()
    totalReceived = 0
    while totalReceived < msgLen:
        chunk = self.sock.recv(min(msgLen - totalReceived,2048)) #sometimes hangs here infinitely

        if len(chunk) == 0:
            raise RuntimeError("socket connection broken")
        totalReceived+= len(chunk)

        for b in chunk:
            msgOut.append(b)

    return msgOut
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...