Search code examples
c#socketslisten

C# - System.Net Socket.Listen Backlog


Ok, I have connected to an IP address using the following code:

        IPAddress myIpAddress = IPAddress.Parse("10.10.15.200");

        IPEndPoint ip = new IPEndPoint(myIpAddress, 5001);
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket.Connect(ip);

I now want to listen to the socket. When I type socket.Listen, intellisense says I need to enter a backlog number, what does this mean?

Also, once I am listening to the socket, how do I capture the content of what I am 'listening' to.

Thanks

John


Solution

  • you can use BeginAccept to read what arrived to your socket/endpoint.

    there is a full example on MSDN, here: Socket.BeginAccept Method

    // This server waits for a connection and then uses asynchronous operations to
        // accept the connection with initial data sent from the client.
    
    
        // Establish the local endpoint for the socket.
    
        IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
    
        // Create a TCP/IP socket.
        Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
    
        // Bind the socket to the local endpoint, and listen for incoming connections.
        listener.Bind(localEndPoint);
        listener.Listen(100);
    
        while (true) 
        {
            // Set the event to nonsignaled state.
            allDone.Reset();
    
            // Start an asynchronous socket to listen for connections and receive data from the client.
            Console.WriteLine("Waiting for a connection...");
    
            // Accept the connection and receive the first 10 bytes of data.
            int receivedDataSize = 10;
            listener.BeginAccept(receivedDataSize, new AsyncCallback(AcceptReceiveCallback), listener);
    
            // Wait until a connection is made and processed before continuing.
            allDone.WaitOne();
        }
    
    }
    
    
    public static void AcceptReceiveCallback(IAsyncResult ar) 
    {
        // Get the socket that handles the client request.
        Socket listener = (Socket) ar.AsyncState;
    
        // End the operation and display the received data on the console.
        byte[] Buffer;
        int bytesTransferred;
        Socket handler = listener.EndAccept(out Buffer, out bytesTransferred, ar);
        string stringTransferred = Encoding.ASCII.GetString(Buffer, 0, bytesTransferred);
    
        Console.WriteLine(stringTransferred);
        Console.WriteLine("Size of data transferred is {0}", bytesTransferred);
    
        // Create the state object for the asynchronous receive.
        StateObject state = new StateObject();
        state.workSocket = handler;
        handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
        new AsyncCallback(ReadCallback), state);
    }