예제 #1
0
 /// <summary>
 /// 连接完成后的回调
 /// </summary>
 /// <param name="asyncConnect"></param>
 private void ConnectedCallback(IAsyncResult asyncConnect)
 {
     if (!socket.Connected)
     {
         connectResultDelegate?.Invoke(ConnectResult.fail);
         return;
     }
     connectResultDelegate?.Invoke(ConnectResult.success);
 }
예제 #2
0
    /// <summary>
    /// 连接服务器
    /// </summary>
    /// <param name="serverIp">IP</param>
    /// <param name="serverPort">端口</param>
    /// <param name="connectCallback">连接成功的回调</param>
    /// <param name="connectFailedCallback">连接失败的回调</param>
    public void ConnectServer(string serverIp, int serverPort, ConnectResultCallback connectCallback)
    {
        RegisterResp.RegisterAll();
        connectResultDelegate = connectCallback;
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPAddress  address  = IPAddress.Parse(serverIp);
        IPEndPoint endpoint = new IPEndPoint(address, serverPort);

        socket.NoDelay = true;
        IAsyncResult result = socket.BeginConnect(endpoint, new AsyncCallback(ConnectedCallback), socket);
        //超时监测,当连接超过5秒还没成功表示超时
        bool success = result.AsyncWaitHandle.WaitOne(5000, true);

        if (!success)
        {
            Closed();
            connectResultDelegate?.Invoke(ConnectResult.fail);
        }
        else
        {
            isStopReceive    = false;
            receiveMsgThread = new Thread(new ThreadStart(ReceiveMessage));
            receiveMsgThread.IsBackground = true;
            receiveMsgFlag = false;
            receiveMsgThread.Start();
            sendMsgThread = new Thread(new ThreadStart(SendCheck));
            sendMsgThread.IsBackground = true;
            sendMsgFlag = false;
            sendMsgThread.Start();
        }
    }