예제 #1
0
        //连接回调
        private void ConnectCallback(IAsyncResult ar)
        {
            try
            {
                SrvSocket.EndConnect(ar);    //结束挂起
                //myConnEvent.Set();            //设置有效信号表示已经收到数据
                OnClientConnected(new AsyncTCPClientEventArgs("已经成功连接到服务器", SrvSocket), "server cnonnect");
                //System.Diagnostics.Debug.WriteLine(String.Format("已经成功连接到服务器{0}!", _srvSocket.RemoteEndPoint.ToString()));
                //System.Diagnostics.Debug.WriteLine(String.Format("本地端接点为{0}!", _srvSocket.LocalEndPoint.ToString()));
                Rcvbuffer = new byte[MaxBufLen];     //创建一个接收缓冲区,用于存储所返回的数据

                ///每秒检测一次Socket是否正常连接
                if (IsAutoKeepAlive)
                {
                    SrvSocket.IOControl(IOControlCode.KeepAliveValues, KeepAlive(1, 60000, 1000), null);
                }

                AsyncCallback callback = new AsyncCallback(ReceiveCallback);
                SrvSocket.BeginReceive(Rcvbuffer, 0, Rcvbuffer.Length, SocketFlags.None, callback, SrvSocket);
            }
            catch (Exception ex)
            {
                LogHelpr.Error("错误:" + ex.ToString());
            }
        }
예제 #2
0
 private void ReceiveCallback(IAsyncResult ar)
 {
     try
     {
         int iDataLen = SrvSocket.EndReceive(ar);             //这是接收回来的数据长度
         if (iDataLen > 0)
         {
             _bReceiveData = new byte[iDataLen];               //存放已经接收返回的数据
             Array.Copy(Rcvbuffer, 0, _bReceiveData, 0, _bReceiveData.Length);
             //重新创建一个接收缓冲区
             //DataProcess(_bReceiveData);
             //ReceiveData = _bReceiveData;
             //ReceiveEvent.Set();
             OnDataReceived(new AsyncTCPClientEventArgs("data receive", SrvSocket), _bReceiveData);
             //AsyncCallback callback = new AsyncCallback(ReceiveCallback);
             //_srvSocket.BeginReceive(Rcvbuffer, 0, Rcvbuffer.Length, SocketFlags.None, callback, _srvSocket);
         }
         else
         {
             ShutdownAndDisposeSocket();
             OnSocketException(new AsyncTCPClientEventArgs("服务器已断开连接", SrvSocket), "server err");
         }
     }
     catch (SocketException ex)
     {
         ShutdownAndDisposeSocket();
         OnSocketException(new AsyncTCPClientEventArgs("服务器已断开连接", SrvSocket), "server err");
         LogHelpr.Error("服务器已断开连接:" + ex.ToString());
     }
     catch (Exception ex)
     {
         OnOtherException(new AsyncTCPClientEventArgs("服务器已断开连接", SrvSocket), "other err");
         LogHelpr.Error("服务器已断开连接:" + ex.ToString());
     }
     finally
     {
         if (SrvSocket != null && SrvSocket.Connected == true)
         {
             Rcvbuffer = new byte[MaxBufLen];
             AsyncCallback callback = new AsyncCallback(ReceiveCallback);
             SrvSocket.BeginReceive(Rcvbuffer, 0, Rcvbuffer.Length, SocketFlags.None, callback, SrvSocket);
         }
     }
 }