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); // 连接关闭回调 }
private void ProcessAccept(SocketAsyncEventArgs iSocketAsyncEventArgs) { if (iSocketAsyncEventArgs.SocketError == SocketError.Success) { App.Logger.Info("Client connection accepted. Local Address: {0}, Remote Address: {1}", iSocketAsyncEventArgs.AcceptSocket.LocalEndPoint, iSocketAsyncEventArgs.AcceptSocket.RemoteEndPoint); AsyncUserToken oSocketToken = AsyncSocketUserTokenPool.Pop(); AsyncSocketUserTokenUsed.Add(oSocketToken.OwnerID1, oSocketToken); //添加到正在连接列表 oSocketToken.Socket = iSocketAsyncEventArgs.AcceptSocket; oSocketToken.ConnectDateTime = DateTime.Now; try { bool willRaiseEvent = oSocketToken.Socket.ReceiveAsync(oSocketToken.RecvEventArgs); //投递接收请求 if (!willRaiseEvent) { OnRecvAsync(oSocketToken.RecvEventArgs); } } catch (Exception e) { App.Logger.Error("Accept client {0} error, message: {1}", oSocketToken.Socket, e.Message); App.Logger.Error(e.StackTrace); } } StartAccept(iSocketAsyncEventArgs); //把当前异步事件释放,等待下次连接 }
private void ProcessAccept(SocketAsyncEventArgs eventArgs) { if (eventArgs.SocketError == SocketError.Success) { App.Info("客户端已连接. 本地地址: {0}, 远程地址: {1}", eventArgs.AcceptSocket.LocalEndPoint, eventArgs.AcceptSocket.RemoteEndPoint); AsyncUserToken socketToken = AsyncSocketUserTokenPool.Pop(); AsyncSocketUserTokenUsed.Add(socketToken); //添加到正在连接列表 socketToken.Socket = eventArgs.AcceptSocket; socketToken.ConnectDateTime = DateTime.Now; Connected?.Invoke(socketToken); // 连接回调 try { bool willRaiseEvent = socketToken.Socket.ReceiveAsync(socketToken.RecvEventArgs); //投递接收请求 if (!willRaiseEvent) { OnRecvAsync(socketToken.RecvEventArgs); } } catch (Exception e) { App.Error("接收客户端连接 {0} 错误, 消息: {1}", socketToken.Socket, e.Message); } } StartAccept(eventArgs); //把当前异步事件释放,等待下次连接 }
public void Send(Packet iPacket) { lock (sendSync) { AsyncUserToken oAsyncUserToken = null; if (AsyncSocketUserTokenUsed.TryGetValue(iPacket.OwnerID1, out oAsyncUserToken)) { ByteArray oByteArray = new ByteArray(); iPacket.Serialization(oByteArray, true); oAsyncUserToken.SendAsync(oByteArray.Bytes); } } }