* Предполагается, что вы отправляете пакеты с модулем сокета python с TCP / IP, например:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip_in, port_in))
Вы не можете отправить пустое сообщение:
sock.sendall(bytes("", 'ascii'))
Строки, отправленные с TCP / IP, заканчиваются нулем и выглядят примерно так:
IP packing | TCP packing | string | null ascii character (0x00 in hex)
Таким образом, отправка "" приведет к:
IP packing | TCP packing | 0x00
, который TCP-сервер будет интерпретировать как разъединение, и обработчик не будет обслуживать запрос.
Чтобы отправить «пустое сообщение», которое будет обрабатывать сервер, используйте что-то вроде:
sock.sendall(bytes("\00", 'ascii'))
, который отправляет пакет, который выглядит следующим образом:
IP packing | TCP packing | 0x00 | 0x00
и обработка будет выглядеть примерно так:
data = str(self.request.recv(1024), 'ascii')
# data = ""
Хотя все tcp-пакеты используют 32 бита данных независимо от того, используются они или нет, поэтому отправка одного нулевого символа на самом деле не будет значительным преимуществом для производительности.