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

当我们使用原生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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值