解决方案 »
- C# 屏幕坐标
- 怎么将txt文件中的数据导入到数据库中,数据量较大
- input输入框光标一闪就消失,根本不能输入文本
- c# table怎样在数据库中取值
- 现在学完C#后,做什么方面比较有前途?
- 如何用c#在wingdows系统未登陆时显示窗体??
- 有一全屏程序,我想屏蔽系统热键,如Alt+Tab,Win,Alt+F4等等
- 如何在C#编程中以特定身份登录访问网络邻居中的一个共享目录?
- 如何在DataSet的内部表之间关联查询?
- 关于连接远程数据库的问题???急,在线等!!!!!
- 能不能把注册表里的一个项下的东西全都写进一个XML,然后树控件再从这个XML里取出想要的东西
- 如何让窗体在点击确定按钮时,不关闭本窗体?
if (b2[0]==0xFF&&b2[1]==0xFF&&b2[2]==0xFF) { //如果找到3个FF 就开始找后面的!16!个字节单个的0会不会影响数据接收的格式?????? : 不会b2 包含着 b3的数据, 这边改下
b3 = new byte[16];
Buffer.BlockCopy(b2, 3, b3, 0, 16);
byte[] 你这方法写的比较丑。
我想问一下 ,用Receive方法接收后,数据是从字节数组里都拿出来了混在一起,还是把字节数组也接收了???
我要是单个引用 某一字节数据 应该怎么取出来啊??????以这段数据流为例
FF FF FF 2 0 0 1D 3 0 1 0 0 0 0 0 0 0 0 0 40
b2[0]就是第一个 FF
b2[18]就是最后一个 40(16进制,十进制的话就是4*16=64)
都说是字节数组了,当然是数组形式了。
只不过FF 1D这些都是16进制的数,0x1D代表10进制的29.
Receive方法是接受当前Scoket连接中 传递过来的数据流。
我要是单个引用 某一字节数据 应该怎么取出来啊??????以这段数据流为例
FF FF FF 2 0 0 1D 3 0 1 0 0 0 0 0 0 0 0 0 40
b2[0]就是第一个 FF
b2[18]就是最后一个 40(16进制,十进制的话就是4*16=64)
都说是字节数组了,当然是数组形式了。
只不过FF 1D这些都是16进制的数,0x1D代表10进制的29.
Receive方法是接受当前Scoket连接中 传递过来的数据流。
那数据流是什么时候又变成byte数组的???Buffer.BlockCopy(b2, 3, b3, 0, 16); 这个方法是什么意思呢???是用b2先做判断好,还是直接一个大数组就一段数据后接收再判断好?????
字节的可能性大些,接收时最好一次性全部接收,再处理。
byte[] buffer = new byte[19];
int len = 0;
while (true)
{
int r = socket1.Receive(buffer, len, buffer.Length - len, 0);
if (r == 0) break; // 断线
len += r;
if (len < 19) continue; // 数据不足继续收
if (buffer[0] == 0xff && buffer[1] == 0xff && buffer[2] == 0xff)
{
}
}
你最好用异步做,不然会堵塞线程的。
你如果用抓包工具抓数据包,显示出来的是FF FF FF 02 00 00 1D 03 00 01 00 00 00 00 00 00 00 00 00 40 数据.
但是你在VS里断点调试,就是十进制显示了,比如FF显示出来是255 其实都是一样的。因为说到底本身传输过来的都是字节流,这里可以显示成二进制,十进制,十六进制都可以。抓包工具只是为了看起来方便。所以转换成了16进制,如果不进行转换 FF 表示出来就是11111111(一个字节,8位),太不低碳了嘛。