public void Update() { if (m_ClientData == null || m_ClientData.ConnectData == null) { return; } TCPConnectData cd = m_ClientData.ConnectData; uint tick = GetTickCount(); if (tick - cd.beginTime < cd.connectTimeout && cd.connected == false) { return; } if (cd.socket.Connected == false) { Debug.Log("TCP Connect Timeout."); m_ClientData.Status = TCPStatusType.ERR_TIMEOUT; //连接超时 CloseSocket(cd.socket); } else { Debug.Log("TCP Connected."); m_ClientData.Status = TCPStatusType.OK_CONNECTED;//已连接 cd.socket.Blocking = false; m_ClientData.ConnectData = null; Thread th = new Thread(new ParameterizedThreadStart(_ThreadRecv)); th.Start(m_ClientData); th = new Thread(new ParameterizedThreadStart(_ThreadSend)); th.Start(m_ClientData); } }
public bool ConnectCoroutine(string ip, ushort port, uint connectTimeout, uint recvTimeout, int buffSize, uint maxCmdCount, uint hearbeatID) { if (IsActive) { return(false); } Shutdown(); AddressFamily newaf = AddressFamily.InterNetwork; Socket socket = CreateSocket(newaf, buffSize); IPEndPoint endpoit = new IPEndPoint(IPAddress.Parse(ip), port); TCPConnectData cd = new TCPConnectData(); cd.endPoint = endpoit; cd.socket = socket; cd.connected = false; cd.connectTimeout = connectTimeout; cd.beginTime = GetTickCount(); Thread th = new Thread(new ParameterizedThreadStart(ThreadConnect)); th.Start(cd); m_ClientData = new TCPClientData(maxCmdCount); m_ClientData.Status = TCPStatusType.OK_CONNECTING; //正在连接 m_ClientData.Socket = socket; m_ClientData.BuffSize = buffSize; m_ClientData.RecvTimeout = recvTimeout; m_ClientData.HearbeatID = hearbeatID; m_ClientData.ConnectData = cd; return(true); }
void ThreadConnect(object obj) { try { TCPConnectData cd = (TCPConnectData)obj; cd.socket.Connect(cd.endPoint); cd.connected = cd.socket.Connected; } catch { } }
public bool Connect(string ip, ushort port, uint connectTimeout, uint recvTimeout, int buffSize, uint maxCmdCount, uint hearbeatID) { if (IsActive) { return(false); } Shutdown(); AddressFamily newaf = AddressFamily.InterNetwork; Socket socket = CreateSocket(newaf, buffSize); IPEndPoint endpoit = new IPEndPoint(IPAddress.Parse(ip), port); TCPConnectData cd = new TCPConnectData(); cd.endPoint = endpoit; cd.socket = socket; cd.connected = false; cd.connectTimeout = connectTimeout; Thread th = new Thread(new ParameterizedThreadStart(ThreadConnect)); th.Start(cd); uint tick = GetTickCount(); while (GetTickCount() - tick < connectTimeout && cd.connected == false) { Thread.Sleep(50); } if (socket.Connected == false) { Debug.Log("Connect Timeout:" + (GetTickCount() - tick) + ", Set:" + connectTimeout); socket.Close(); return(false); } m_ClientData = new TCPClientData(maxCmdCount); m_ClientData.Status = TCPStatusType.OK_CONNECTED; m_ClientData.Socket = socket; m_ClientData.BuffSize = buffSize; m_ClientData.RecvTimeout = recvTimeout; m_ClientData.HearbeatID = hearbeatID; socket.Blocking = false; th = new Thread(new ParameterizedThreadStart(_ThreadRecv)); th.Start(m_ClientData); th = new Thread(new ParameterizedThreadStart(_ThreadSend)); th.Start(m_ClientData); Debug.Log("TCP Connected2."); return(true); }