예제 #1
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();
        }
    }
예제 #2
0
    public void Start(string hostName, int port, DataReceiveCallback receiveCallback, ConnectResultCallback connectCallback)
    {
        try
        {
            m_ReceiveCallback = receiveCallback;
            m_Buffer          = new byte[1024];
            IPHostEntry ipHostInfo = Dns.Resolve(hostName);
            IPAddress   ipAddress  = ipHostInfo.AddressList[0];
            IPEndPoint  remoteEP   = new IPEndPoint(ipAddress, port);

            lock (m_Socket)
            {
                m_Socket.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), m_Socket);
                m_Stopped = false;
            }
            m_ConnectDone.WaitOne();

            connectCallback(m_Socket.Connected);

            while (!m_Stopped && m_Socket.Connected)
            {
                if (m_ReceiveDone.WaitOne(100))
                {
                    m_ReceiveDone.Reset();
                    Receive();
                }
            }

            m_Socket.Shutdown(SocketShutdown.Both);
            m_Socket.Close();
        }
        catch (Exception)
        {
        }
    }