public void AsyncDisconnect(CallBackNormal tmpDisconnectBack) { try { errorSocket = ErrorSockect.eSuccess; this.callBackDisconnect = tmpDisconnectBack; if (clientSocket == null) { this.callBackDisconnect(false, ErrorSockect.eDisConnectUnkown, "client is null"); } else if (!clientSocket.Connected) { this.callBackDisconnect(false, ErrorSockect.eDisConnectUnkown, "client is unConnect"); } else { IAsyncResult asynDisconnet = clientSocket.BeginDisconnect(false, DisconnectCallBack, clientSocket); if (WriteDot(asynDisconnet)) { this.callBackDisconnect(false, ErrorSockect.eDisConnectUnkown, "disconnect failed"); } } } catch (Exception e) { this.callBackDisconnect(false, ErrorSockect.eDisConnectUnkown, "disconnect failed"); } }
private void CallBackDisconnect(bool success, ErrorSockect error, string exception) { if (success) { sendThread.Abort(); } }
private void AsysnConnectCallBack(bool success, ErrorSockect error, string exception) { if (success) { sendThread = new Thread(LoopSendMsg); sendThread.Start(); } }
private void AsysnRecvCallBack(bool success, ErrorSockect error, string exception, byte[] byteMessage, string strMessage) { if (success) { } else { } }
//true 表示可以写入,false 表示超时 bool WriteDot(IAsyncResult ar) { int i = 0; while (ar.IsCompleted == false) { i++; if (i > 20) { errorSocket = ErrorSockect.eTimeOut; return(false); } Thread.Sleep(100); } return(true); }
public void AsyncConnect(string ip, ushort port, CallBackNormal connectBack, CallBackRecv tmpRecvBack) { errorSocket = ErrorSockect.eSuccess; this.callBackConnect = connectBack; this.callBackRecv = tmpRecvBack; if (clientSocket != null && clientSocket.Connected) { this.callBackConnect(false, ErrorSockect.eConnectError, "connect repeat"); } else if (clientSocket == null || !clientSocket.Connected) { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ipAddress = IPAddress.Parse(ip); IPEndPoint endPoint = new IPEndPoint(ipAddress, port); IAsyncResult connect = clientSocket.BeginConnect(endPoint, ConnectCallBack, clientSocket); if (WriteDot(connect)) { connectBack(false, errorSocket, "链接超时"); } } }
public void AsynSend(byte[] sendBuffer, CallBackNormal tmpSendBack) { errorSocket = ErrorSockect.eSuccess; this.callBackSend = tmpSendBack; if (clientSocket == null) { this.callBackSend(false, ErrorSockect.eSockectNull, ""); } else if (!clientSocket.Connected) { callBackSend(false, ErrorSockect.eSockectUnConnect, ""); } else { IAsyncResult asySend = clientSocket.BeginSend(sendBuffer, 0, sendBuffer.Length, SocketFlags.None, SendCallBack, clientSocket); if (!WriteDot(asySend)) { callBackSend(false, ErrorSockect.eSendUnSuccessUnKown, "send failed"); } } }
private void ConnectCallBack(IAsyncResult asConnect) { try { clientSocket.EndConnect(asConnect); if (clientSocket.Connected == false) { errorSocket = ErrorSockect.eConnectUnSuccessUnKown; callBackConnect(false, errorSocket, "链接超时"); return; } else { //开始接收消息 errorSocket = ErrorSockect.eConnectSuccess; this.callBackConnect(false, errorSocket, "success"); } } catch (Exception e) { this.callBackConnect(false, errorSocket, e.ToString()); } }
private void CallBackSend(bool success, ErrorSockect error, string exception) { }