C# socket 怎么接收c++传来的字符串

yangjing6693 2012-06-13 09:25:14
c++那里给我发回的是 一个用户名 例如:admin 我这里接到怎么解呢 我在网上找了一个方法
byte[] buf = new byte[80];

Int32 bytes = 0;
string revs = "";

bytes=socket.Receive(buf,0);
revs = Encoding.ASCII.GetString(buf,0,bytes);


解开后的确有了 但是 后面还有一些乱码一样的东西 接到的是:Administrator\0\0\0\0

这个不知道 怎么回事 我的要求是 先接Administrator 接到后 然后再接一个整数(判断是否读取成功的)
可是现在 直接到 前面的用户Administrator\0\0\0\0 后面接受的不能走了
...全文
289 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-06-13
  • 打赏
  • 举报
回复
接收的时候,把字符串的长度和字符串一起传过来
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
revs = Encoding.ASCII.GetString(buf,0,bytes);
revs = revs.TrimEnd('\0');
popo0762 2012-06-13
  • 打赏
  • 举报
回复
因为,你定义了接收数据的数组的长度,当接收数据不足你定义的80个字节时,不足部分,是默认值0x00填充的。0x00对应的ASCII值,就是\0,所以,你看到后面一串\0是正常的。这里,你解析的时候,可以先遍历一遍接收到的数据,发现0x00时,记录下此时数组索引,假设为iIndex,并退出遍历,解析时,用revs = Encoding.ASCII.GetString(buf,0,iIndex);就行了。
假设0x00之后还有其他数据,也可以用遍历的方式,把非0x00的Byte,累加至List<Byte>里,遍历完了解析就成。
解决思路是很多的。
yangjing6693 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你可以将\0替换为空
[/Quote]
这方面 我不懂的
bdmh 2012-06-13
  • 打赏
  • 举报
回复
你可以将\0替换为空

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧