TcpClient.GetStream().Write() обнуляет ведущий бит

282
28 декабря 2017, 22:10

Использую telnet-клиент на основе System.Net.Sockets.TcpClient Реализовал установку кодировки. Приём кириллических символов работает. А отправка нет. Например, шлю байт 215 0b1101_0111, а на удаленный хост приходит 87 0b0101_0111

var tcpClient = new TcpClient(host, port);
.....
byte[] buffer = new byte[3];
buffer[0] = 0b1101_0111;
buffer[1] = (byte)'\r';
buffer[2] = (byte)'\n';
tcpClient.GetStream().Write(buffer, 0, buffer.Length);
Answer 1

Как правильно понял @PavelMayorov, проблема на стороне удалённого хоста. По умолчанию, он общается с клиентом в каком-то 7-битном режиме. Однако у меня имелась сторонняя программа телнет-клиент, которая могла работать в полнобайтном режиме. С помощью Wireshark я просканировал трафик, которым обменивались эта программа и проблемный хост. Оказалось после ввода пароля, они начинают обмениваться особыми командами, которые начинались с байта ESC(27, \033, 0x1B). Это явно не входит в Telnet протокол, это какой-то специфичный для сервера язык жестов. В Telnet-е команды должны начинаться с байта IAC (255, \377, 0xFF). Так как документации на этот язык жестов я не нашёл, то пришлось просто составить словарь вопросов-ответов, и воткнуть их в своё приложение. Теперь я могу отправлять кириллические символы в своём приложении и они доходят как надо.

READ ALSO
Не заполняется окно потоков MSVS 2012

Не заполняется окно потоков MSVS 2012

При запуске приложения, у которого более 20 работающих потоков, окно "Потоки" (Отладка->Окна->Потоки) ничего не выводитОно пустое

218
Unity Время бездействия

Unity Время бездействия

Какие есть варианты распознать бездействие игрока? допустим если 15 секунд ничего не делает не нажимает, тогда какое то действие выполнять...

348
Обмен данными Unity3d(клиент) и Node.js(сервер)

Обмен данными Unity3d(клиент) и Node.js(сервер)

Хочу наладить обмен информации сервер-клиент(Nodejs<->Unity3D) В случае с серверной частью беру такой скрипт

330
В чем практический смысл метода SetApartmentState?

В чем практический смысл метода SetApartmentState?

Работал с потоками и появился вопрос, когда увидел вот этот код:

245