Как ограничить TcpClient ждать подключения или клиента в течение определенного времени, чем остановить прием клиентов? - PullRequest
0 голосов
/ 25 августа 2009

Я использую простое взаимодействие с клиентом, в котором я использую

TcpClient c = t.AcceptTcpClient();

Теперь клиент ждет регистрации в течение неопределенного времени. Теперь я хочу, чтобы он подождал, скажем, 5 минут, а затем автоматически перестал слушать

Ответы [ 2 ]

1 голос
/ 25 августа 2009

Если вы используете службу Windows, вы можете использовать таймер:

System.Timers.Timer myTimer;

В событии OnStart вашего сервиса:

protected override void OnStart(string[] args)
{
    MyListener.StartListening();
    myTimer.Start();
}

В событии Истекшего Таймера:

private void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    MyListener.StopListening();
    myTimer.Stop();
}

Это может удовлетворить ваши насущные потребности, но я бы также посоветовал взглянуть на Threading .

* Редактировать : Тот же принцип применяется при использовании таймера с Winforms.

0 голосов
/ 25 августа 2009

Просто используйте метод Pending из TcpListener. Что-то вроде

private TcpClient TryToConnect() {    
    DateTime dtStart=DateTime.Now;    
    while(CheckTime(dtStart)) {    
      if(t.Pending()) { return(t.AcceptTcpClient());  } //someone wants to connect

      //maybe it's a good idea to give some resources to other processes    
      Thread.Sleep(100);    
    }    
    //no one came in here    
    return(null);
}

CheckTime(DateTime p) - метод (который вы должны написать), который проверяет DateTime.Now на соответствие параметру. Если осталось время, верните true - иначе верните false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...