项目开发中遇到的一些问题--组播相关(接收数据出现\0)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzishang/article/details/84138053

当我们使用原生socket进行组播接收时获取的byte[]定义了长度 但是组播发送方发送的数据可能不足这个长度 这时byte[]中不足部分会填入0 当直接GetString时会在正常字符串后面出现\0 

处理方法:

1)直接replace或者trim或者endtrim       这种方法不推荐 规范的C语言会以第一个\0作为字符串的截断字符 如果是规范的可以用 但是如果发送方不是你做的 无法保证规范性 容易截错

2)使用GetString  正常情况下,一个二进制协议中会有一个字段来说明byte[]中有效字符到底是多少个。 这时可以用GetString(byte[],0,count)进行获取

byte[]和string的转换应该按照有依据的原理来准确识别出真实的不冗余的数据。而不是自己随便 Replace 或者 Trim

byte[] b = new byte[112];
int count = s.ReceiveFrom(b, ref ep);
string test = UTF8Encoding.UTF8.GetString(b, 0, count);

猜你喜欢

转载自blog.csdn.net/liuzishang/article/details/84138053