Как включить заголовок с данными, которые я отправляю на tcp сервер - PullRequest
0 голосов
/ 26 октября 2018

Я надеюсь, что это хороший день, чтобы получить хороший ответ. У меня есть код, который отправляет данные на сервер TCP. Я в порядке при отправке данных, но я не знаю, как включить заголовок. Вот как должны выглядеть заголовки:

Для связи между устройством и интерфейсом XML используется сообщение TCP, начинающееся с заголовка, чтобы указать длину сегмента данных сообщения. Этот заголовок должен предшествовать всем сообщениям, отправляемым на интерфейс XML, и будет отправляться в начале всех ответов TCP от интерфейса XML.

Если длина сообщения меньше 2 ^ 16-1 или 65535, то будет использоваться двухбайтовый заголовок.

Первый байт заголовка содержит частное от длины сообщения (исключая этот заголовок) и 256. Второй байт содержит остаток от этого деления. Оба эти значения представлены в двоичном виде в виде целочисленных значений без знака в диапазоне от 0 до 255 (байты от 0x00 до 0xFF).

Если длина сообщения больше или равна 216-1 или 65535 байтов, то будет использоваться шестибайтовый заголовок.

В этом случае следует отправлять байты 0xFF 0xFF, за которыми следует четырехбайтовый индикатор длины, то есть всего шесть байтов.

Теперь у меня есть следующее, и, как вы можете видеть, это не решает проблему с заголовком. Который в основном мой вопрос.

    private static void main2(String hostname, int port, String message)
    {

        String response = String.Empty;            
       TcpClient client = new TcpClient(hostname, port);  
        Console.WriteLine(message);
        NetworkStream stream = client.GetStream();
        StreamWriter writer = new StreamWriter(stream,Encoding.UTF8);

        writer.AutoFlush = false;            
        writer.WriteLine(message);          
        writer.Flush();           
        writer.Close();          

        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
        response = reader.ReadLine();

        stream.Close();
    }

Информация попадает на мой TCP-сервер. (подтверждено с помощью tcp viewer). Но поскольку я не знаю, как включить заголовок, сервер не сможет ответить мне, так как он считает мой запрос не завершенным. Заранее спасибо, ребята, за вашу помощь.

1 Ответ

0 голосов
/ 26 октября 2018

Заголовок, о котором они говорят, это не только префикс сообщения?Они не дают пример?Попробуйте это (скажем, сообщение меньше 65535 байт):

var totalMessageLength = message.Length + 2;
var quotient = (int)totalMessageLength / 256;
var modulo = totalMessageLength % 256;
message = $"{quotient.ToString("X2")}{modulo.ToString("X2")}{message}";
...