2010-01-14 6 views
0

Я использую C# сокеты Асинхронный режим.TCPIP сервер одно соединение

Мне нужно обслуживать только одно соединение в приложении с серверной точки зрения. как только один подключен, я хотел бы отказаться от любых запросов на соединение.

также сервер служит только для подключения к одному клиенту. при выполнении связи сервер должен быть перезапущен.

но из того, что я прочитал по этой теме, невозможно закрыть beginaccept.

Мне бы хотелось, чтобы некоторые идеи касались того, как обойти эту ситуацию.

ответ

2

Как правило, в обратном вызове async BeginAccept вы снова вызываете BeginAccept, чтобы можно было принять другое соединение. Однако этот шаг можно пропустить, если вы не хотите разрешать другое подключение. Чтобы своевременно было отказано в подключении, рассмотрите также закрытие слухового сокета в обратном вызове. Принятый Socket будет оставаться открытым в этом случае для вас, даже если гнездо для прослушивания закрыто.

class SocketTest 
{ 
    private Socket m_Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

    public void Test() 
    { 
     m_Listener.Bind(new IPEndPoint(IPAddress.Loopback, 8888)); 
     m_Listener.Listen(16); 
     m_Listener.BeginAccept(AcceptCallback, null); 
    } 

    private void AcceptCallback(IAsyncResult ar) 
    { 
     Socket s = m_Listener.EndAccept(ar); 
     m_Listener.Close(); 
     /* Use s here. */ 
    } 
} 
+0

Отлично! спасибо за помощь в понимании объема асинхронных сокетов. – iTEgg

Смежные вопросы