Дождаться входящего соединения на определённом порту, разобрать бинарные данные, сформировать ответ, отправить обратно.
Соединения производятся раз в пять секунд, например.
Проблема: половина (каждый второй) ответ обрывается - в wireshark я вижу RST, ACK.
Код примерно такой:
import binascii import socket import struct import sys sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('10.10.10.10', 2001) sock.bind(server_address) sock.listen(1) unpacker = struct.Struct('>b b b b b b 6s 4s 4s h h h h h h h') packer = struct.Struct('>b b b b b b 6s 4s 4s h h h h h h h') while True: print >>sys.stderr, '\nwaiting for a connection' connection, client_address = sock.accept() try: data = connection.recv(unpacker.size) unpacked_data = unpacker.unpack(data) conf_arr = list(unpacked_data) conf_arr[3] = 1 # тут должно быть что-то более осмысленное packed_data = packer.pack(*conf_arr) connection.sendall(packed_data) finally: connection.close()
Было бы понятно, если бы терялись все ответы, но тут - ровно половина.
Может быть, кто-то сталкивался с подобным?