日期:2014-05-18  浏览次数:20734 次

小项目要完成了,卡在这里,请各位留心下!
做了个类似于QQ的,之前遇到好多问题都是序列化那边报错...
我想了想 应该是接受的时候没有接完整 它才提示我错误的...
之后 我read的时候 加大了字节长度....可以了,我本地测试 所有的问题都没了
可把客户端给别人....就不行了, 想请大家帮忙 看看我这个分割 消息的方式 有什么不对么????


这个项目 要完了, 求大家帮忙看下, 我太苦恼了!!!

发送消息:
//str是一条消息.....【序列化而成的字符串】
stream.Write(Encoding.Unicode.GetBytes(str), 0, Encoding.Unicode.GetBytes(str).Length);
stream.Write(Encoding.Unicode.GetBytes("|"), 0, Encoding.Unicode.GetBytes("|").Length);




接受消息 + 切割消息:
  string data = null; //最后要切割
  while (true)
  {
  byte[] buffer = new byte[5000]; //我加大这个5000的数值之后 接起来有点卡,但之前2000的话 消息接不完整
  int bytesRec = stream.Read(buffer, 0, buffer.Length);
  //int bytesRec = handler.Receive(bytes);
  data += Encoding.Unicode.GetString(buffer, 0, bytesRec);
  if (data.IndexOf("|") > -1)//这个代表接受到指定的消息,也是自己定义即可
  {
  break;
  }
  }
  
  string[] t = data.Split('|'); //把消息切割成多份“命令”然后进行消息处理,把一条条完整消息切割下来放在t数组里面....然后数组元素一个个提取【反序列化之后】再处理!!!!!!




总体大概就是这样
在本地吧。。。都已经测试 没有半点问题了.... 可把客户端给别人用的时候接受了一条消息, 第二条没有接受完整就进入了反序列化...所以它提示我,反序列化格式不正确....



哎,这个平台 好是好, 可是也不知道为什么,我发了 5 6条帖子 特别少人上心.....
希望如果真的会的 帮忙下吧.....谁也有需要帮忙的时候,虽然我没多少分!!!但我尽量把问题描述详细了,希望得到
满意的结果~~~~!!!



------解决方案--------------------
更正一下
C# code

byte[] buffer = new byte[4096];
int offset = 0;
int count = 4;
Socket client..........
while(true)
{
      int len = client.Receive(buffer, offset, count, SocketFlags.None);
      if (len != count)
      {
           offset += len;
           count -= len;
           continue;
      }           
      int datalen = BitConverter.ToInt32(buffer, 0);
      if (sd.OffSet < 4)
      {
           offset = 4;
           count = datalen - 4;
           continue;
      }
      DoSomething(client, buffer, 0, datalen);
      offset = 0;
      count = 4;
}