Принимать и отправлять данные в разных горутинах чтобы исключить возможность блокировки.
Писать принимаемые данные в буфер - нет гарантии, что весь пакет считается за одно чтение.
По умолчанию сделать параметры serverAddress = 9000, terminaID = 1, numPackets = 100.
go fmt project
parsePacket - не используется.
Обрабатывать ошибки parsedPacket.Parse(packet).
binary.LittleEndian.PutUint32(packetAuth[31:35], terminalID)
crc := crc16(packetAuth[15:])
binary.BigEndian.PutUint16(packetAuth[6:8], crc) - перенести в navprot.ndtp.change и делать вызов к change. Оформи как pull request в navprot. Там точно packetAuth[31:35]?
if parsedPacket.Nph.ServiceID == NPH_SRV_GENERIC_CONTROLS {
numControl++
} - не посчитает ответ на пакет авторизации?
Сейчас данный функционал работает некорректно - буфер парсится только один раз в не зависимости от того сколько в нем пакетов. В результате программа зависает на conn.Read хотя в буфере есть нераспарсенные пакеты. Чтобы это исправить, нужно парсить буфер до тех пор пока в нем остаются целые пакеты. Если при парсинге оказалось что в буфере была только первая половина пакета, нужно сохранить ее и затем произвести конкатенацию со следующим считанным значением.
Необходимо сделать следующие доработки: