我用C# socekt的接受数据!!接过来第一包有22100的byte后面接就卡得要死 我这22100的数据 FF是开头 EE是结尾 算是一条数据 我要怎么把这些数据区分开来
byte[] by=new byte[socket.av....];自动获取大小的 我要怎么判断
byte[] by=new byte[socket.av....];自动获取大小的 我要怎么判断
解决方案 »
- DevExpress的ComboBoxEdit怎么实现类似ComboBox的DisplayMember和ValueMember的功能
- ftp文件上传服务器问题
- menustrip会随着滚动条滚动,这个问题怎么解决啊。
- VS2005如何创建多项目的解决方案?
- 关于WinForm的简单问题.
- 在vs2005里设计winform,比如打开一个mousedown事件,出来的是vb.net格式的语句,不是c#的,怎么改到c#格式?
- 执行下面的程序 为什么我的Priority.Hightest没起作用?
- 用VML开发工作流的高手请进
- 自定义的一个控件,如何设置他的高度为固定值,即使应用了dockStyle.Full也不能改变其高度.
- 请问calendar里怎么添加上一年、下一年呢?
- Page.FindControl方法找不到指定控件的问题
- TCP 通讯小问题!!
而且如果是你一次发送22K的数据,正常情况下不会分包发送,也就是说
你的Available == 22100
还有就是Buffer不要动态开,一般都是指定大小如果1024,4096之类的数值去接收属具.
Avaliable只是作为一个标记判断有数据来了,到底能收到多少数据,看Receive的返回值给你个例子,自己扩展
const int msgLength = 22100;
int curReceivedLength = 0; while(true)
{
if(s.Available > 0)
{
byte[] buffer = new byte[s.Available];
int receivedLength = s.Receive(buffer, SocketFlags.None); if(buffer[0] == 0xFF && curReceivedLength == 0)
{
//收到新的Msg
//to do
} curReceivedLength += buffer.Length; if (buffer[buffer.Length - 1] == 0xEE && curReceivedLength == msgLength)
{
//Msg接收完毕
//to do
curReceivedLength = 0;
}
}
else
{
Thread.Sleep(100);
}
}