小项目要完成了,卡在这里,请各位留心下!
做了个类似于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;
}