コード例 #1
0
ファイル: ServerSocket.cs プロジェクト: bluexary/Farseer.net
        /// <summary>
        /// 接收线程
        /// </summary>
        /// <param name="ar">回调参数</param>
        private void ReceiveEnd(IAsyncResult ar)
        {
            var state = ar.AsyncState as StateObject;

            if (state == null)
            {
                return;
            }

            try { state.ByteCount = state.WorkSocket.EndReceive(ar); }
            catch { state.ByteCount = 0; state.Buffer = new byte[0]; }

            if (state.WorkSocket.Connected && state.ByteCount > 0)
            {
                state.WorkSocket.BeginReceive(state.Buffer, 0, state.BufferSize, 0, new AsyncCallback(ReceiveEnd), state);
            }
            else // 客户端关闭
            {
                // 添加到客户端列表
                var ep = state.WorkSocket.RemoteEndPoint as IPEndPoint;
                LstClient.Remove(ep);
            }

            // 执行传入的委托
            if (_actReceive != null)
            {
                _actReceive(state);
            }
        }
コード例 #2
0
ファイル: ServerSocket.cs プロジェクト: bluexary/Farseer.net
 /// <summary>
 /// 停止服务
 /// </summary>
 public void Stop()
 {
     if (_socket != null)
     {
         if (_socket.Connected)
         {
             _socket.Shutdown(SocketShutdown.Both);
         }
         _socket.Close(); _socket.Dispose(); _socket = null;
     }
     foreach (var item in LstClient)
     {
         item.Value.Close(); item.Value.Dispose();
     }
     LstClient.Clear();
 }