/// <summary> /// 启动 /// </summary> /// <param name="backlog"> 挂起的连接队列的最大长度。</param> public void Start(int backlog = 10) { SOCKET_SERVER.Bind(IPE); SOCKET_SERVER.Listen(backlog); SOCKET_SERVER.BeginAccept(new AsyncCallback(BeginAcceptConnection), null); Log4netHelper.Debug($"监听{IPE.Address.ToString()}成功"); }
/// <summary> /// 停止 /// </summary> public void Stop() { if (!this.IsDisposable) { SendAll("服务端请求断开链接"); Log4netHelper.Debug("正在关闭服务端"); SOCKET_SERVER.Close(); SOCKET_SERVER.Dispose(); this.IsDisposable = true; } }
/// <summary> /// 接受连接 /// </summary> /// <param name="ar"></param> private void BeginAcceptConnection(IAsyncResult ar) { if (this.IsDisposable) { return; } var socket = SOCKET_SERVER.EndAccept(ar); var remoteEndPoint = ((System.Net.IPEndPoint)socket.RemoteEndPoint); Log4netHelper.Debug($"{remoteEndPoint.Address.ToString()}连接到了本服务端"); var session = new SocketSession(socket) { Id = Guid.NewGuid().ToString(), RemoteEndPoint = socket.RemoteEndPoint, ReceiveCallback = (obj, msg) => { try { ReceiveEvent(obj, msg); } catch (Exception ex) { Log4netHelper.Fatal($"服务端在执行ReceiveEvent事件时发生异常{Environment.NewLine}消息内容{msg}{Environment.NewLine}会话{JsonHelper.SerializeObject(obj)}", ex); } }, DisposeCallback = (obj) => { SESSIONS.Remove(obj); }, }; session.Start(); SESSIONS.Add(session); SOCKET_SERVER.BeginAccept(new AsyncCallback(BeginAcceptConnection), null); AcceptConnectionEvent(session, null); }