public static void ReadCallback(IAsyncResult ar) { String content = String.Empty; // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; // Read data from the client socket. int bytesRead = handler.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(); if (content.IndexOf("?") > -1) { // All the data has been read from the // client. Display it on the console. content = content.Substring(0, content.Length - 1); // Echo the data back to the client. Expression expression = JSONHelper.From <AsyncSocketServer.Expression>(content); Console.WriteLine("Calculating : {0} ... ", expression.argument1 + expression.oper + expression.argument2); String result = null; try{ double val = expression.eval(); result = val.ToString(); }catch (InvalidOperationException ex) { result = ex.Message; } Send(handler, result); } else { // Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } }