客户端我是这样实现的!! //连接成功
void TcpClient_ConnectedServer(object sender, NetEventArgs e)
{
count = 0;
IsConnected = true;
TcpClient.Send(RqtCMD.Login("1.0", UIN, PWD));//发送登录消息
BeginInvoke(new EventHandler(OnConnect), null);
}
//连接失败
void TcpClient_DisConnectedServer(object sender, NetEventArgs e)
{
CliClose();//回收资源
Thread.Sleep(1000);//1秒
if (count++ < 5)//尝试连接次数
{
Thread.Sleep(5000);//5秒
ConnectServer(_ip, _port);//再次连接
}
else//认为真的断线
BeginInvoke(new EventHandler(OnDisConnected), null);
}现在的问题是当我重启服务端后,所有断线的客户就会同时登录,服务端根本处理不过来.
出现数据丢失错误!有什么好的解决方法????
void TcpClient_ConnectedServer(object sender, NetEventArgs e)
{
count = 0;
IsConnected = true;
TcpClient.Send(RqtCMD.Login("1.0", UIN, PWD));//发送登录消息
BeginInvoke(new EventHandler(OnConnect), null);
}
//连接失败
void TcpClient_DisConnectedServer(object sender, NetEventArgs e)
{
CliClose();//回收资源
Thread.Sleep(1000);//1秒
if (count++ < 5)//尝试连接次数
{
Thread.Sleep(5000);//5秒
ConnectServer(_ip, _port);//再次连接
}
else//认为真的断线
BeginInvoke(new EventHandler(OnDisConnected), null);
}现在的问题是当我重启服务端后,所有断线的客户就会同时登录,服务端根本处理不过来.
出现数据丢失错误!有什么好的解决方法????
解决方案 »
- 序列化 反序列化
- c# windows 程序上传照片
- 不显示删除回复显示所有回复显示星级回复显示得分回复 关于C#写一个IP地址控件想到的问题(关于Windows控件开发)?
- 超时时间已到,但是尚未从池中获取连接……帮我看看是不是这一段惹的祸……
- Winform 中用户控件的问题?
- 如何刷票?
- 为什么,我的OWC组件axSpreadsheet,运行之后不能支持右键
- [求助大大]vs2010客户端项目其中一个窗体被误删了,能找回么
- 一个加急问题!!!怎样取得这个数组的值????
- C# 怎么将html表格生成pdf保存,不用第三方
- 有人能写吗?给real钱
- 有没有熟悉语音识别方面的问题,谢谢 啦 !
CMD=Login|SEQ=4791312|VER=1.0.0.0|UIN=3224713|PWD=1
Login表示登录
SEQ是为了防止重复发送而设定的一个标记,取当前时间数值的一段
...
服务端接收后是用string.split来分的;为了取出方便我把它先装入一个Hashtable public RecvMsg()
{
_HasTable = new Hashtable();
//命令7个
_HasTable.Add("CMD", "");
_HasTable.Add("VER", "");
_HasTable.Add("SEQ", "");
_HasTable.Add("RES", "");
_HasTable.Add("RA", "");
_HasTable.Add("MSG", "");
_HasTable.Add("ST", "");
.....
/// <summary>
/// 数据分析
/// </summary>
/// <param name="datagram">接收的消息</param>
public void SplitStr(string datagram)
{
string[] tokens = datagram.Split(new char[] { '|' });
for (int i = 0; i < tokens.Length; i++)
{
string[] Items = tokens[i].Split(new char[] { '=' });
_HasTable[Items[0]] = Items[1];
}
}
而后可以直接取CMD、SEQ、VER的值了这样做我当时是为了存取方便,程序优雅些!可能也是问题所在.
to Kninght94 我是不是这样做
服务接收后先存入一个Queue表,用另一线程来处理??
肯定是拆装箱太频繁费时 。想问一下处理这样的字符串有没更好的方法!
CMD=Login|SEQ=4791312|VER=1.0.0.0|UIN=3224713|PWD=1