在接受客户端连接TCPLISTENER之前等待特定时间

时间:2014-12-16 13:43:37

标签: c# tcplistener time-wait

我想在服务器接受客户端连接之前等待10秒,我一直在寻找网络,但我没有找到示例,

这是我写的代码,是否有人可以为此提供解决方案,非常感谢:

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 个答案:

答案 0 :(得分:0)

我真的不想知道你为什么要这样做,但只是等到结束接受之前就会这样做:

// 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);

    // ...
}