public virtual void CloseSocket(AsyncUserToken iSocketToken) { if (iSocketToken.Socket == null) { return; } string socketInfo = string.Format("Local Address: {0} Remote Address: {1}", iSocketToken.Socket.LocalEndPoint, iSocketToken.SendEventArgs.RemoteEndPoint); App.Logger.Info("Connection disconnected. {0}", socketInfo); try { iSocketToken.Socket.Shutdown(SocketShutdown.Both); } catch (Exception e) { App.Logger.Info("CloseSocket Disconnect {0} error, message: {1}", socketInfo, e.Message); } iSocketToken.Socket.Close(); iSocketToken.Socket = null; //释放引用,并清理缓存,包括释放协议对象等资源 iSocketToken.Clear(); AsyncSocketUserTokenUsed.Remove(iSocketToken.OwnerID1); AsyncSocketUserTokenPool.Push(iSocketToken); MaxNumberAccepted.Release(); }
public virtual void CloseSocket(AsyncUserToken socketToken) { if (socketToken.Socket == null) { return; } string socketInfo = string.Format("本地地址: {0} 远程地址: {1}", socketToken.Socket.LocalEndPoint, socketToken.Socket.RemoteEndPoint); try { socketToken.Socket.Shutdown(SocketShutdown.Both); App.Info("关闭连接. {0}", socketInfo); } catch (Exception e) { App.Info("关闭连接 {0} 错误, 消息: {1}", socketInfo, e.Message); } socketToken.Socket.Close(); socketToken.Socket = null; //释放引用,并清理缓存,包括释放协议对象等资源 socketToken.Clear(); AsyncSocketUserTokenUsed.Remove(socketToken); AsyncSocketUserTokenPool.Push(socketToken); MaxNumberAccepted.Release(); Closed?.Invoke(socketToken); // 连接关闭回调 }
public void CloseSocket(AsyncSocketUserToken userToken) { if (userToken.ConnectSocket == null) { return; } string socketInfo = string.Format("Local Address: {0} Remote Address: {1}", userToken.ConnectSocket.LocalEndPoint, userToken.SendEventArgs.RemoteEndPoint); App.Logger.Info("Connection disconnected. {0}", socketInfo); try { userToken.ConnectSocket.Shutdown(SocketShutdown.Both); } catch (Exception E) { App.Logger.Info("CloseSocket Disconnect {0} error, message: {1}", socketInfo, E.Message); } userToken.ConnectSocket.Close(); userToken.ConnectSocket = null; //释放引用,并清理缓存,包括释放协议对象等资源 userToken.TokenClose(); MaxNumberAccepted.Release(); AsyncSocketUserTokenPool.Push(userToken); AsyncSocketUserTokenList.Remove(userToken); }
public void Connect(string host, int port) { IPEndPoint oIPEndPoint = new IPEndPoint(IPAddress.Parse(host), port); ListenSocket = new Socket(oIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); SocketAsyncEventArgs connectEventArgs = new SocketAsyncEventArgs() { RemoteEndPoint = oIPEndPoint, AcceptSocket = ListenSocket }; connectEventArgs.Completed += ConnectEventArg_Completed; MaxNumberAccepted.WaitOne(); StartConnect(connectEventArgs); }
public void StartAccept(SocketAsyncEventArgs iSocketAsyncEventArgs) { if (iSocketAsyncEventArgs == null) { iSocketAsyncEventArgs = new SocketAsyncEventArgs(); iSocketAsyncEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(AcceptEventArg_Completed); } else { iSocketAsyncEventArgs.AcceptSocket = null; //释放上次绑定的Socket,等待下一个Socket连接 } MaxNumberAccepted.WaitOne(); //获取信号量 bool willRaiseEvent = ListenSocket.AcceptAsync(iSocketAsyncEventArgs); if (!willRaiseEvent) { ProcessAccept(iSocketAsyncEventArgs); } }
public void StartAccept(SocketAsyncEventArgs acceptEventArgs) { if (acceptEventArgs == null) { acceptEventArgs = new SocketAsyncEventArgs(); acceptEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(AcceptEventArg_Completed); } else { acceptEventArgs.AcceptSocket = null; } MaxNumberAccepted.WaitOne(); bool willRaiseEvent = ListenSocket.AcceptAsync(acceptEventArgs); if (!willRaiseEvent) { ProcessAccept(acceptEventArgs); } }