public void StartReceiving() { if (!connected) { return; } try { var readEvent = new AutoResetEvent(false); var recieveArgs = new SocketAsyncEventArgs() { UserToken = readEvent }; byte[] buffer = new byte[BufferSize]; recieveArgs.SetBuffer(buffer, 0, BufferSize); recieveArgs.Completed += recieveArgs_Completed; stopReceiver = false; do { client.ReceiveAsync(recieveArgs); readEvent.WaitOne();//Wait for recieve if (!IsConnected) { stopReceiver = true; } } while (!stopReceiver); recieveArgs.Completed -= recieveArgs_Completed; } catch (Exception e) { State = NetworkStates.NetworkError; networkError = e; SendData(State.ToString(), TransmitedDataType.Status); } }
void AcceptSocket(IAsyncResult result) { try { var server = ((TcpListener)result.AsyncState); client = ((TcpListener)result.AsyncState).EndAcceptSocket(result); Console.WriteLine("Connection accepted from " + client.RemoteEndPoint); connected = true; if (OnClientConnected != null) { OnClientConnected.Invoke(client); } State = NetworkStates.Connected; ClientState = NetworkStates.Connected; networkError = null; SendData(State.ToString(), TransmitedDataType.Status); if (AutoStart) { StartReceiving(); } } catch (Exception e) { State = NetworkStates.NetworkError; networkError = e; } }
public void Disconnect() { if (connected) { try { State = NetworkStates.Disconnected; SendData(State.ToString(), TransmitedDataType.Status); System.Threading.Thread.Sleep(2000); StopReceiving(); client.Close(); connected = false; } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; } } }
public void StartReceiving() { if (!connected) { return; } try { stopReceiver = false; byte[] buffer = new byte[BufferSize]; connectionStream.BeginRead(buffer, 0, BufferSize, dataRead, buffer); networkError = null; } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; SendData(State.ToString(), TransmitedDataType.Status); } }
// ~ClientModel() //{ // if(connected) // { // StopReceiving(); // Disconnect(); // client = null; // } //} public bool ConnectToServer() { try { //commenting out this section since when connecting in a loop it throws exception becaue here we used iasyc //IAsyncResult ar = client.BeginConnect(IP, port, null, client); //bool result = ar.AsyncWaitHandle.WaitOne(1000, false); //if (!result || !client.Connected) //{ // State = NetworkStates.FailedToConnect; // return false; //} client.Connect(IP, port); // use the ipaddress as in the server program connectionStream = client.GetStream(); Console.WriteLine("Connected"); connected = true; if (OnConnectedToServer != null) { OnConnectedToServer.Invoke(client.Client); } State = NetworkStates.Connected; ServerState = NetworkStates.Connected; networkError = null; SendData(State.ToString(), TransmitedDataType.Status); if (AutoStart) { StartReceiving(); } return(true); } catch (System.Net.Sockets.SocketException sockEx) { networkError = sockEx; State = NetworkStates.NetworkError; } return(false); }