Xamarin Forms Как изменить порт или IP-адрес сокетного соединения - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть приложение UWP (скоро также MacOS), которое прослушивает входящие сообщения.Пользователь может настроить, какой IP-адрес и порт прослушивать.После прослушивания сокетного соединения пользователь также может вернуться в настройки и изменить IP-адрес или порт.Я пытаюсь выяснить, как закрыть существующий прослушиватель и перезапустить его, используя новый порт / IP-адрес, когда пользователь изменяет значения.Вот мой код, который запускает слушателя.Любая помощь будет оценена.

   private static Socket iobj_listener;

    public async static Task StartListening()
    {
        try
        {
            Debug.WriteLine("Point 1");
            IPEndPoint localEndPoint = new IPEndPoint(ViewModelObjects.AppSettings.ServerIPAddress, ViewModelObjects.AppSettings.ServerPort);

            // Create a TCP/IP socket.  
            iobj_listener = new Socket(ViewModelObjects.AppSettings.ServerIPAddress.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);

            // Bind the socket to the local endpoint and listen for incoming connections.  
            iobj_listener.Bind(localEndPoint);
            iobj_listener.Listen(100);
            ViewModelObjects.AppSettings.ListeningOnSocket = true;

            while (true)
            {
                Debug.WriteLine("Point 2");
                // Set the event to nonsignaled state.  
                allDone.Reset();

                // Start an asynchronous socket to listen for connections.  
                Debug.WriteLine("Waiting for a connection on " + ViewModelObjects.AppSettings.ServerIPAddress.ToString() + "...");
                iobj_listener.BeginAccept(
                    new AsyncCallback(AcceptCallback),
                    iobj_listener);

                // Wait until a connection is made before continuing.  
                allDone.WaitOne();
            }

        }
        catch (Exception e)
        {
            Debug.WriteLine(e.ToString());
        }
        finally
        {
            Debug.WriteLine("Point 3");
            ViewModelObjects.AppSettings.ListeningOnSocket = false;
        }
    }
...