C# SOCKET 远程主机强制关闭现有的连接
各位大神,我用SOCKET异步的方式,服务端的软件。结果运行的时候老是出现“远程主机强制关闭一个现有的连接”的问题。
代码如下:
代码如下:
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);//这句不知道加上去对不对?
}
}
...全文
相关推荐
C# socket异步长连接
**关闭连接**:当不再需要连接时,调用Close方法关闭Socket。在提供的文件列表中,"Server"可能包含了一个示例服务器端的代码实现。
c# socket 通信demo 亲测可用,断开连接事件
**关闭和清理**: 当不再需要使用Socket时,应确保调用`Close`方法关闭连接并释放资源。在使用异步操作时,还要注意取消任何未完成的操作。
C# 后端 socket 连接 封装类
**发送数据方法**:使用`Send`方法将数据发送到连接的远程主机。确保先将字符串转换为字节数组。
c# Socket长连接 短链接 自己封装 通讯
标题“c# Socket长连接 短链接 自己封装 通讯”揭示了我们将讨论的主题:如何使用C#实现Socket的长连接和短连接,并自定义通信协议。这里的关键点包括:1.
C# Socket使用
**连接服务器**:对于客户端,我们需要连接到远程服务器。


