我用C# socekt的接受数据!!

wanxiang19900404 2010-09-23 09:38:38
我用C# socekt的接受数据!!

接过来第一包有22100的byte

后面接就卡得要死 我这22100的数据 FF是开头 EE是结尾 算是一条数据 我要怎么把这些数据区分开来


byte[] by=new byte[socket.av....];

自动获取大小的 我要怎么判断
...全文
97 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
suners 2010-09-24
  • 打赏
  • 举报
回复
研究中
bloodish 2010-09-23
  • 打赏
  • 举报
回复
如果是PC机,一次收22K的包的就卡死,绝对是你自己的程序有问题,
而且如果是你一次发送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);
}
}

111,129

社区成员

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

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

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