Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
            }
        }
    }