TCPIP сервер одно соединение - PullRequest
0 голосов
/ 15 января 2010

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

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

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

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

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

1 Ответ

2 голосов
/ 15 января 2010

Обычно при асинхронном обратном вызове 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. */
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...