接收未知报文大小的tcp请求

本文关键字:tcp 请求 未知 报文 | 更新日期: 2023-09-27 18:12:38

我有一个tcp侦听器设置,我有一个未知的消息大小进来。我不确定处理未知消息大小的最佳实践是什么。下面是代码:

TcpListener _server = new TcpListener(_localAddr, _port);
_server.Start();
while (true)
{
    if (_server.Pending())
    {
        Byte[] bytes = new Byte[256];//Works fine if message under this size
        string data = string.Empty;
        _client = _server.AcceptTcpClient();
        NetworkStream stream = _client.GetStream();
        int i;
        while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
        {
            data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
            data = data.ToUpper();
            //Do stuff with data
        }
}

所以你会注意到我可以将数组字节的大小从256更改为更大的东西,但我不知道是否有比将大小设置为我知道足够大的东西更好的方法。如果消息小于256,则正常工作。

感谢您的帮助

接收未知报文大小的tcp请求

如果消息长度不是永久的,发送消息的服务应该在每条消息的开头发送几个字节(通常为4,因为Int32是32位,即4字节),以指示消息长度

当你收到消息时,你应该首先读取这4个字节,然后在你解析它们之后,你就会知道消息的长度,你可以创建适当大小的字节数组。

现在可以将消息本身读入该数组。