socket.receive函数可以连续调用几次吗,这样读的缓冲区是从头读还是继续读

谁学逆向工程 2017-01-13 02:26:27
我这有一串byte[],是安卓发来的,【0】到【3】是一个int 类型,【4】到【7】是一个int类型,表示后面还剩多少byte。
我这里这样读取并转换没出来预期效果,是不是不可以这样调用?
还是说我需要一次性读取全部缓冲区,然后在0到3、4到7的解释。

byte[] bLen = new byte[4];
byte[] bufLouCeng;//楼层
byte[] bufFangJian;//房间
byte[] bufZhuoHao;//桌号
int iLen;

socket.Receive(bLen, 4, 0);
socket.Receive(bLen, 4, 0);
iLen = System.BitConverter.ToInt32(bLen, 0);
bufLouCeng = new byte[iLen];
socket.Receive(bufLouCeng, iLen, 0);
string strLouCen = Encoding.UTF8.GetString(bufLouCeng);
...全文
210 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
字符串和流是不受影响的,但是数值类型,逐个转成字节再拼接成多个byte[], 刚好 byte[] bufLouCeng;//楼层 byte[] bufFangJian;//房间 byte[] bufZhuoHao;//桌号 就是这种情况 iLen = System.BitConverter.ToInt32(bLen, 0); iLen = IPAddress.NetworkToHostOrder(iLen); 印象中好像是这样,调试看下
谁学逆向工程 2017-01-13
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
如果你看懂了 socket.Receive 返回值,看懂了 socket.Receive方法的编程说明,你说它是“数据应该从头开始读,还是从什么鬼地方开始读”啊?
字节顺序那个怎么解决
  • 打赏
  • 举报
回复
如果你看懂了 socket.Receive 返回值,看懂了 socket.Receive方法的编程说明,你说它是“数据应该从头开始读,还是从什么鬼地方开始读”啊?
  • 打赏
  • 举报
回复
晕死! socket.Receive 方法返回的 int 数据,告诉你缓冲区中有多少字节是真实数据!!! 你连这个都不看,怎么学的编程?
谁学逆向工程 2017-01-13
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
看一下字节序是否一样,.Net默认是本地字节序(小端),andrio可能和java一样,是网络字节序,如果不一样,要再用 IPAddress.NetworkToHostOrder 方法 (Int32)转换一下 https://technet.microsoft.com/zh-cn/library/x1886wea(v=vs.95).aspx
还真是这个问题,C#发给安卓不用转换,安卓发回来就需要转换了。。。。 但是安卓还发回来字符串了呢,字符串的byte流怎么转成string,用什么转换成本机字节流
谁学逆向工程 2017-01-13
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
看一下字节序是否一样,.Net默认是本地字节序(小端),andrio可能和java一样,是网络字节序,如果不一样,要再用 IPAddress.NetworkToHostOrder 方法 (Int32)转换一下 https://technet.microsoft.com/zh-cn/library/x1886wea(v=vs.95).aspx
应该是一样的,前一段时间这个项目中是从C#发给安卓,现在是安卓发给C#,当也没管字节顺序
谁学逆向工程 2017-01-13
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
连续调用缓冲区是继续读的
但是socket.Receive什么时候有(byte[], int, int)这样的重载了?

Poopaye 2017-01-13
  • 打赏
  • 举报
回复
连续调用缓冲区是继续读的 但是socket.Receive什么时候有(byte[], int, int)这样的重载了?
  • 打赏
  • 举报
回复
看一下字节序是否一样,.Net默认是本地字节序(小端),andrio可能和java一样,是网络字节序,如果不一样,要再用 IPAddress.NetworkToHostOrder 方法 (Int32)转换一下 https://technet.microsoft.com/zh-cn/library/x1886wea(v=vs.95).aspx

110,538

社区成员

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

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

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