/// <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(); } }
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) { } }