Exemplo n.º 1
0
 /// <summary>
 /// 释放SOCKET资源与关闭
 /// </summary>
 private void ShutdownAndDisposeSocket()
 {
     if (SrvSocket != null)
     {
         SrvSocket.Shutdown(SocketShutdown.Both);
         SrvSocket.Close();
         SrvSocket = null;
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 同步连接
        /// </summary>
        /// <param name="strIP"></param>
        /// <param name="iPort"></param>
        public void BuildServerSocket(string strIP, int iPort)
        {
            try
            {
                if (SrvSocket == null)
                {
                    SrvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                }
                if (SrvSocket.Connected)
                {
                    if (SrvSocket.RemoteEndPoint.ToString() != strIP + ":" + iPort.ToString())
                    {
                        SrvSocket.Disconnect(true);
                    }
                }
                if (!SrvSocket.Connected)
                {
                    //从配置文件获取ip地址和端口号
                    IPEndPoint _ipep = BuildIPEndPoint(strIP, iPort);
                    if (_ipep != null)
                    {
                        //AsyncCallback callback = new AsyncCallback(ConnectCallback);
                        SrvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                        //SrvSocket.BeginConnect(_ipep, callback, SrvSocket);
                        //尝试连接
                        try
                        {
                            SrvSocket.Connect(_ipep);
                        }
                        //异常处理
                        catch (SocketException e)
                        {
                            OnSocketException(new SyncTCPClientEventArgs("连接失败", SrvSocket), "connect err");
                            return;
                        }
                        if (SrvSocket.Connected)
                        {
                            OnClientConnected(new SyncTCPClientEventArgs("已经成功连接到服务器", SrvSocket), "server cnonnect");
                        }

                        SyncReceiveData();
                    }
                }
            }
            catch
            {
                OnOtherException(new SyncTCPClientEventArgs("创建连接失败", SrvSocket), "connect err");
                return;
            }

        }
Exemplo n.º 3
0
 //发送数据回调
 private void SendCallback(IAsyncResult ar)
 {
     try
     {
         int sendNum = SrvSocket.EndSend(ar);    //结束挂起的异步发送
         //System.Diagnostics.Debug.WriteLine("向Socket发送字节数:" + sendNum.ToString());
     }
     catch
     {
         ShutdownAndDisposeSocket();
         //System.Diagnostics.Debug.WriteLine("服务器断开了TCP连接!");
     }
 }
Exemplo n.º 4
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);
         }
     }
 }