Как остановить и запустить Relisten для подключения клиентского сокета в C # - PullRequest
0 голосов
/ 08 мая 2018

Я работаю над проектом банкомата (tcp / ip, C #). Я должен нажать кнопку запуска в приложении сервера, чтобы начать прослушивание клиента. OInce клиент отправляет подпись по запросу (подключиться), соединение между сервером и клиентом установлено (до этого момента я закончил).

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

public bool startlisten() 
{
        byte[] buffer = new byte[4000];

        try
        {
            //Creates one SocketPermission object for access restrictions
            permission = new SocketPermission(
                 NetworkAccess.Accept,     // Allowed to accept connections 
                 TransportType.Tcp,        // Defines transport types 
                 "",                       // The IP addresses of local host 
                 SocketPermission.AllPorts // Specifies all ports 
            );

            // Listening Socket object 
            sListener = null;

            //Ensures the code to have permission to access a Socket 
            permission.Demand();

            // Resolves a host name to an IPHostEntry instance 
            IPHostEntry ipHost = Dns.GetHostEntry("");

            int portnumber = int.Parse(ConfigurationManager.AppSettings.Get("port"));

            // Creates a network endpoint 
            ipEndPoint = new IPEndPoint(IPAddress.Any, portnumber);

            // Create one Socket object to listen the incoming connection 
            sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // Associates a Socket with a local endpoint 
            sListener.Bind(ipEndPoint);


            // Places a Socket in a listening state and specifies the maximum 
            // Length of the pending connections queue 
            sListener.Listen(10);

            //Begins an asynchronous operation to accept an attempt 
            AsyncCallback aCallback = new AsyncCallback(AcceptCallback);
            sListener.BeginAccept(aCallback, sListener);


        }
        catch (Exception exc) {
            return true;
        }

        return true;
}

Пожалуйста, объясните мне, как отключиться от клиентского сокета и снова начать прослушивание.

Я пытался

//handler.Disconnect(false);                
           //handler.Shutdown(SocketShutdown.Both);
           //handler.Close();

sListener и обработчик являются объектом Socket, в то время как принимающий (acceptconnection) слушатель копируется в обработчик.

...