public static 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. StateObject2 state = new StateObject2(); state.workSocket = handler; handler.BeginReceive(state.buffer, 0, StateObject2.BufferSize, 0, new AsyncCallback(ReadCallback), state); }
public static void ReadCallback(IAsyncResult ar) { String content = String.Empty; // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject2 state = (StateObject2)ar.AsyncState; Socket handler = state.workSocket; // Read data from the client socket. int bytesRead = handler.EndReceive(ar); Console.WriteLine(state.buffer); if (bytesRead > 0) { using (var fs = new FileStream("C:\\Projects\\aff.bin", FileMode.CreateNew, FileAccess.ReadWrite)) { fs.Write(state.buffer, 0, bytesRead); } Console.Write(Encoding.UTF8.GetString( state.buffer, 0, bytesRead)); // 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(); Console.WriteLine(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); } else { // Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject2.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } }