如何在我发送到TCP服务器的数据中包含标头

时间:2018-10-26 17:23:38

标签: c# tcpclient tcp-ip

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

  

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

     

如果消息长度小于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查看器确认)。但是由于我不知道如何包含标头,因此服务器无法响应我,因为它正在考虑我的请求未完成。在此先感谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

他们所说的

标头不仅是消息的前缀?他们没有提供例子吗?试试这个(假设消息少于65535字节):

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