/// <summary> /// 连接完成后的回调 /// </summary> /// <param name="asyncConnect"></param> private void ConnectedCallback(IAsyncResult asyncConnect) { if (!socket.Connected) { connectResultDelegate?.Invoke(ConnectResult.fail); return; } connectResultDelegate?.Invoke(ConnectResult.success); }
/// <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(); } }