【问题标题】:How to include a header with the data that i send to a tcp server如何在发送到 tcp 服务器的数据中包含标头
【发布时间】:2018-10-27 04:45:43
【问题描述】:

我希望这是获得好答案的好日子。我有将数据发送到 TCP 服务器的代码。我可以发送数据,但我不知道如何包含标题。标题应该是什么样的准则如下

Device 与 XML 接口之间的通信使用 TCP 消息以标头开头,以指示消息数据段的长度。此标头必须在发送到 XML 接口的所有消息之前,并且将在来自 XML 接口的所有 TCP 响应的开头发送。

如果消息长度小于 2^16-1 或 65535,则将使用两个字节的标头。

标头的第一个字节包含消息长度(不包括此标头)与 256 的商。第二个字节包含此除法的余数。这两个值都以二进制表示为无符号整数值,范围从 0 到 255(字节 0x00 到 0xFF)。

如果消息长度大于或等于 216-1 或 65535 字节,则将使用 6 字节标头。

在这种情况下,应发送字节 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 查看器确认)。但是因为我不知道如何包含标头,所以服务器无法回复我,因为它认为我的请求不完整。提前感谢你们的帮助。

【问题讨论】:

    标签: c# tcpclient tcp-ip


    【解决方案1】:

    他们所说的Header不只是消息的前缀吗?他们不提供例子?试试这个(假设消息小于 65535 字节):

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

    【讨论】:

    • 不幸的是,并没有真正提供示例。我唯一的线索是查看 TCP 查看器,其中 306 字节的预定义演示测试(无可用代码)消息产生此标头“.0 ".(点零)
    • 上述解决方案也不起作用。还有为什么要加 + 2?
    • 由于我们没有头绪,我只是尝试在消息前添加2个字符,即标题。 TCP 对我来说似乎是一条原始消息。
    • 您可以发布带有 .0 标头的演示消息吗?你可以用十六进制发帖。
    • 使用 TCP 查看器我发布了即将发布的演示消息。 ascii,, utf-8 和 HEX。我没有得到 TCP 服务器的响应。还注意到我在运行演示时看到的 XML 与演示中所说的发送的 XML 并不完全相同。 .0..
    猜你喜欢
    • 2023-03-23
    • 2017-12-28
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多