接收未知报文大小的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,则正常工作。
感谢您的帮助
如果消息长度不是永久的,发送消息的服务应该在每条消息的开头发送几个字节(通常为4,因为Int32是32位,即4字节),以指示消息长度
当你收到消息时,你应该首先读取这4个字节,然后在你解析它们之后,你就会知道消息的长度,你可以创建适当大小的字节数组。
现在可以将消息本身读入该数组。