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("<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); // Process protocol and call methods. string[] protocol = content.Split('|'); switch (protocol[0]) { case "Connect": Send(handler, "OK"); break; case "CarSave": carController.Save(); Send(handler, "OK"); break; case "CarCreate": carController.Create(protocol[1]); Send(handler, "OK"); break; case "CarEdit": carController.Edit(protocol[1], protocol[2]); Send(handler, "OK"); break; case "CarRemove": carController.Remove(protocol[1]); Send(handler, "OK"); break; case "CarGet": Send(handler, carController.Get(Int32.Parse(protocol[1]), Int32.Parse(protocol[2]))); break; case "CarSearch": Send(handler, carController.Search(protocol[1], Int32.Parse(protocol[2]), Int32.Parse(protocol[3]))); break; case "CarIndex": Send(handler, carController.Index(protocol[1])); break; case "JobSave": jobController.Save(); Send(handler, "OK"); break; case "JobCreate": jobController.Create(protocol[1]); Send(handler, "OK"); break; case "JobEdit": jobController.Edit(protocol[1], protocol[2]); Send(handler, "OK"); break; case "JobRemove": jobController.Remove(protocol[1]); Send(handler, "OK"); break; case "JobGet": Send(handler, jobController.Get(Int32.Parse(protocol[1]), Int32.Parse(protocol[2]), Int32.Parse(protocol[3]))); break; case "JobSearch": Send(handler, jobController.Search(protocol[1], Int32.Parse(protocol[2]), Int32.Parse(protocol[3]), Int32.Parse(protocol[4]))); break; default: Send(handler, "ERROR"); break; } } else { // Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } }