110,536
社区成员
发帖
与我相关
我的任务
分享
protected virtual void AcceptConn(IAsyncResult iar)//服务端与客户端的连接函数
{
//如果服务器停止了服务,就不能再接收新的客户端
if (!_isRun)
{
return;
}
try
{
//接受一个客户端的连接请求
Socket oldserver = (Socket)iar.AsyncState;
Socket client = oldserver.EndAccept(iar);
StatusChange();
System.Timers.Timer timer3 = new System.Timers.Timer(240000);//实例化Timer类,设置时间间隔为4min
timer3.Elapsed += new System.Timers.ElapsedEventHandler(delegate { if (client.Connected) { CloseClient(client, Session.ExitType.NormalExit); }});//到达时间的时候执行
//timer3.Elapsed += new System.Timers.ElapsedEventHandler(delegate { StatusChange(); });//到达时间的时候执行
timer3.AutoReset = false;//设置是执行一次(false)还是一直执行(true)
timer3.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件
//客户端引用计数+1
_clientCount++;
int tempuserid = 0;
for (int hsn = 0; hsn <= checklistboxTable.Count; hsn++)
{
tempuserid++;//在1-30中任取一个随机数
if (!checklistboxTable.ContainsKey(tempuserid))
{
_userid = tempuserid;
break;
}
}
Session newSession = new Session(client);//新建一个客户端会话
// newSession.UserName = _userid;
_sessionTable.Add(newSession.ID, newSession);//存入hash表
checklistboxTable.Add(_userid, newSession.ID);
//开始接受来自该客户端的数据
client.BeginReceive(_recvDataBuffer, 0, _recvDataBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveData), client);
//新的客户段连接,发出通知
if (ClientConn != null)//ClientConn为连接事件
{
ClientConn(this, new NetEventArgs(newSession));
}
//继续接受客户端
_svrSock.BeginAccept(new AsyncCallback(AcceptConn), _svrSock);
}
catch (Exception exp)
{
MessageBox.Show("AcceptConn函数有误" + exp.Message);
_svrSock.BeginAccept(new AsyncCallback(AcceptConn), _svrSock);//这句不知道加上去对不对?
}
}
贴出调试截屏画面,调试器应该直接终端在抛出异常的语句上。