Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C#] UDP клиент, заголовки, протокол

61K
24 мая 2012 года
GregRUS
9 / / 20.10.2010
Доброе время суток!
Сразу оговорюсь - с сокетами в C# мало знаком.
Есть необходимость написать небольшой UDP-клиент с использованием определенного протокола, который имеет свой заголовок, различные типы пакетов.
Создать UDP-клиент не проблема. Вопрос в том - как заставить его работать в соответствии с заданной спецификацией:
http://www.battleye.com/downloads/BERConProtocol.txt

Если есть возможность - опишите в небольшом примере, т.к. застрял на байтах в этой спецификации.
Заранее спасибо!
40K
24 мая 2012 года
D129
228 / / 18.04.2012
Начните от печки. Во первых - создайте базовый класс сообщения, который будет выдавать стандартрный заголовок и будет вычислять контрольную сумму.
От него отнаследуйте потомков - логин, комманд, сервермессадж...
каждый из них будет пользоваться базовым, и добавлять в строку сообщения свои поля со своей логикой -
для логина, например, будет только одно поле - Password .....

в сокет записываются - считываются байты (массивы байтов), тут вам придется помучиться с кодировкой. Я советую делать преобразование только перед передачей, и пользоваться юникодом везде.
Есть куча конвертеров в дотнете - только найти нужный надо.

В коде, который управляет протоколом будет легко играться порядком сообщений и содержанием, если сразу создать слой низкого уровня (кодировки - декодировки и построение сообщения).

Трудно помочь коротким примером - так как надо досконально разобраться в спецификации.

Еще - если устройство - сервер (что у вас там) уже работает, поищите универсального клиента - есть такие программы, позволяют читать-писать в сокеты и порты, строить любые сообщения. Может помочь при затыках в кодировке и ответах-приветах от сервера.
61K
05 июня 2012 года
GregRUS
9 / / 20.10.2010
Написал клиент на основе ваших советов, но столкнулся с проблемой при вычислении CRC32 суммы...
Поставил соответсвующий класс в 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).

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог