void AcceptCallback(IAsyncResult ar) { // Signal the main thread to continue. allDone.Set(); // Get the socket that handles the client request. Socket listener = (Socket)ar.AsyncState; Socket handler = listener.EndAccept(ar); // Create the state object. TCPMessageState state = new TCPMessageState(); state.workSocket = handler; handler.BeginReceive(state.buffer, 0, TCPMessageState.BufferSize, 0, new AsyncCallback(ReadCallback), state); }
public void ReadCallback(IAsyncResult ar) { String content = String.Empty; // Retrieve the state object and the handler socket // from the asynchronous state object. TCPMessageState state = (TCPMessageState)ar.AsyncState; lastCallerClient = state.workSocket; // Read data from the client socket. int bytesRead = lastCallerClient.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetString( state.buffer, 0, bytesRead)); // Check for end-of-file tag. If it is not there, read // more data. content = state.sb.ToString(); LastMessage = content; //if (content.IndexOf("<EOF>") > -1) //{ // // All the data has been read from the // // client. Display it on the console. // Console.WriteLine("Read {0} bytes from socket. \n Data : {1}", // content.Length, content); // // Echo the data back to the client. // // Send(handler, content); // LastMessage = content; //} //else //{ // // Not all data received. Get more. // handler.BeginReceive(state.buffer, 0, TCPMessageState.BufferSize, 0, // new AsyncCallback(ReadCallback), state); //} } }