【问题标题】:Waiting for specific time before accepting client connexion TCPLISTENER在接受客户端连接 TCPLISTENER 之前等待特定时间
【发布时间】:2014-12-16 13:43:36
【问题描述】:

我想在服务器接受客户端连接之前等待 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);
        }

    }
}

【问题讨论】:

    标签: c# tcplistener time-wait


    【解决方案1】:

    我真的不想知道你为什么想要这个,只是在结束接受之前等待就可以了:

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

    【讨论】:

    • 天哪,我发现自己无法对此投票。它回答了这个问题,但这个问题被严重误导了。
    • @usr 因此是我的第一句话。这尖叫 XY 问题。
    • @CodeCaster 谢谢你,我想用它来测试一个存在于 asp.net 服务器中的 TIBCO EMS Timeout 来模拟生产中的错误。
    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2012-01-16
    相关资源
    最近更新 更多