Клиент:
self.serv_sock.send(CCoinPackage(pkg_type='ask_for_peers').package_data())
Сервер:
BUF_SIZE = 12
while not self.STOP_FLAG.is_set():
try:
buff = self.sock.recv(constants.BUF_SIZE)
print(buff)
if buff != b'':
message_ended = False
while not message_ended:
self.sock.settimeout(self.sock_timeout)
try:
data = self.sock.recv(constants.BUF_SIZE)
except socket.timeout:
message_ended = True
buff += data
print(len(buff))
print(buff)
print(CCoinPackage(got_bytes=buff).unpackage_data())
except socket.timeout:
continue
except socket.error as e:
raise e
Вывод:
b'\x00\x00\x00\x05\x16\x9d\x00\x00\xb3\xdb"p'
24
b'\x00\x00\x00\x05\x16\x9d\x00\x00\xb3\xdb"p\x97\xc95\x99\xff\x94\x81\x8e$#\x0eW'
36
b'\x00\x00\x00\x05\x16\x9d\x00\x00\xb3\xdb"p\x97\xc95\x99\xff\x94\x81\x8e$#\x0eW\xba\xb8\xe1\xe1\xb6`\x9f\x81\xf3\x96\xd4:'
48
b'\x00\x00\x00\x05\x16\x9d\x00\x00\xb3\xdb"p\x97\xc95\x99\xff\x94\x81\x8e$#\x0eW\xba\xb8\xe1\xe1\xb6`\x9f\x81\xf3\x96\xd4:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
52
b'\x00\x00\x00\x05\x16\x9d\x00\x00\xb3\xdb"p\x97\xc95\x99\xff\x94\x81\x8e$#\x0eW\xba\xb8\xe1\xe1\xb6`\x9f\x81\xf3\x96\xd4:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
56
b'\x00\x00\x00\x05\x16\x9d\x00\x00\xb3\xdb"p\x97\xc95\x99\xff\x94\x81\x8e$#\x0eW\xba\xb8\xe1\xe1\xb6`\x9f\x81\xf3\x96\xd4:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Также протестировал, поигрался с размером буффера, и всегда выходит так, что если размер буфера = N, то количество добавляемых нулей в конце всегда len(sent_data) % N. То есть в последний раз почитал действительных 4 байта, а потом опять 4 нуля добавил. Также если это были не нули, а какая-то другая последовательность байт, то отправляется повторно она же. Почему так происходит и как этого избежать адекватно (не не учитывать последнюю итерацию)? Ну и узнать хочется почему так