Waiting for specific time before accepting client connexion TCPLISTENER

625 views Asked by At

I want to wait for 10 sec before that the server accept connexion of a client, i ve been looking in the net but i did not find an example,

this is the code i wrote , is there anyone who could give a solution for that, thanks a lot:

class Program
{
    // Thread signal.
    public static ManualResetEvent tcpClientConnected = new ManualResetEvent(false);

    // Accept one client connection asynchronously.
    public static void DoBeginAcceptTcpClient(TcpListener listener)
    {
        // Set the event to nonsignaled state.
        tcpClientConnected.Reset();

        // Start to listen for connections from a client.
        Console.WriteLine("Waiting for a connection...");

        // Accept the connection. 
        // BeginAcceptSocket() creates the accepted socket.
        listener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback),listener);

        // Wait until a connection is made and processed before 
        // continuing.
        tcpClientConnected.WaitOne(10000);
    }

    // Process the client connection.
    public static void DoAcceptTcpClientCallback(IAsyncResult ar)
    {
        // Get the listener that handles the client request.
        TcpListener listener = (TcpListener)ar.AsyncState;

        // End the operation and display the received data on 
        // the console.
        TcpClient client = listener.EndAcceptTcpClient(ar);

        // Process the connection here. (Add the client to a
        // server table, read data, etc.)
        Console.WriteLine("Client connected completed");

        // Signal the calling thread to continue.
        tcpClientConnected.Set();

    }
    static void Main(string[] args)
    {
        Int32 port = 1300;
        IPAddress localAddr = IPAddress.Parse("127.0.0.1");
        TcpListener listener = new TcpListener(localAddr, port);
        listener.Start();

        while (true)
        {
            DoBeginAcceptTcpClient(listener);
        }

    }
}
1

There are 1 answers

3
CodeCaster On BEST ANSWER

I really don't want to know why you'd want this, but simply waiting before ending the accept will do that:

// Process the client connection.
public static void DoAcceptTcpClientCallback(IAsyncResult ar)
{
    // Get the listener that handles the client request.
    TcpListener listener = (TcpListener)ar.AsyncState;

    // Wait a while
    Thread.Sleep(10 * 1000);        

    // End the operation and display the received data on 
    // the console.
    TcpClient client = listener.EndAcceptTcpClient(ar);

    // ...
}