[C#] UDP клиент, заголовки, протокол
Сразу оговорюсь - с сокетами в C# мало знаком.
Есть необходимость написать небольшой UDP-клиент с использованием определенного протокола, который имеет свой заголовок, различные типы пакетов.
Создать UDP-клиент не проблема. Вопрос в том - как заставить его работать в соответствии с заданной спецификацией:
http://www.battleye.com/downloads/BERConProtocol.txt
Если есть возможность - опишите в небольшом примере, т.к. застрял на байтах в этой спецификации.
Заранее спасибо!
От него отнаследуйте потомков - логин, комманд, сервермессадж...
каждый из них будет пользоваться базовым, и добавлять в строку сообщения свои поля со своей логикой -
для логина, например, будет только одно поле - Password .....
в сокет записываются - считываются байты (массивы байтов), тут вам придется помучиться с кодировкой. Я советую делать преобразование только перед передачей, и пользоваться юникодом везде.
Есть куча конвертеров в дотнете - только найти нужный надо.
В коде, который управляет протоколом будет легко играться порядком сообщений и содержанием, если сразу создать слой низкого уровня (кодировки - декодировки и построение сообщения).
Трудно помочь коротким примером - так как надо досконально разобраться в спецификации.
Еще - если устройство - сервер (что у вас там) уже работает, поищите универсального клиента - есть такие программы, позволяют читать-писать в сокеты и порты, строить любые сообщения. Может помочь при затыках в кодировке и ответах-приветах от сервера.
Поставил соответсвующий класс в C#.
Считаю что в нем ошибок нет, т.к. идентичный результат выдавал и онлайн генератор суммы (http://www.lammertbies.nl/comm/info/crc-calculation.html)
Оригинальная программа, на выходе выдает:
42 45 12 71 89 9D FF 00 74 65 73 74 70 61 73 73
А моя:
42 45 1B DC B3 85 FF 00 74 65 73 74 70 61 73 73
Т.е. все совпадает кроме суммы.
Вычислял сумму для байта 0x00 и строки: "testpass" (00 74 65 73 74 70 61 73 73 )
Если я правильно понял написанное в спецификации (4-byte CRC32 checksum of the subsequent bytes).