Как да се свържа към Windows Universal App StreamSocket от конзолно приложение?

Следя за връзки чрез универсално приложение на Windows и бих искал да се свържа с това приложение чрез конзолно приложение на Windows. Направих основен код, който според мен трябва да се свърже, но получавам грешка при изчакване от конзолното приложение.

{"A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.0.5:1771"}

Универсалното приложение на Windows никога дори не влиза във функцията за получена връзка.

Сървърът (UWP):

    public async void SetupServer()
    {
        try
        {
            //Create a StreamSocketListener to start listening for TCP connections.
            Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener();

            //Hook up an event handler to call when connections are received.
            socketListener.ConnectionReceived += SocketListener_ConnectionReceived;

            //Get Our IP Address that we will host on.
            IReadOnlyList<HostName> hosts = NetworkInformation.GetHostNames();
            HostName myName = hosts[3];

            //Assign our IP Address
            ipTextBlock.Text = myName.DisplayName+":1771";
            ipTextBlock.Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255,0,255,0));

            //Start listening for incoming TCP connections on the specified port. You can specify any port that' s not currently in use.
            await socketListener.BindEndpointAsync(myName, "1771");
        }
        catch (Exception e)
        {
            //Handle exception.
        }
    }

Клиентът (конзолно приложение):

static void Main(string[] args)
    {
        try
        {
            byte[] data = new byte[1024];
            int sent;
            string ip = "192.168.0.5";
            int port = 1771;
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(ip), port);
            TcpClient client = new TcpClient();
            client.Connect(ipep); //**************Stalls HERE************
            using (NetworkStream ns = client.GetStream())
            {
                using (StreamReader sr = new StreamReader(ns))
                {
                    using (StreamWriter sw = new StreamWriter(ns))
                    {
                        sw.WriteLine("Hello!");
                        sw.Flush();
                        System.Threading.Thread.Sleep(1000);
                        Console.WriteLine("Response: " + sr.ReadLine());
                    }
                }
            }
        }
        catch (Exception e)
        {

        }
    }

person Seth Kitchen    schedule 07.11.2016    source източник


Отговори (1)


Тествах вашия код от моя страна и може да работи добре. Така че няма нищо лошо в кода ви. Но мога да възпроизведа проблема ви, като стартирам сървъра и клиента на едно и също устройство, клиентът ще хвърли същото изключение, както показахте по-горе. Така че, моля, уверете се, че се свързвате от друга машина. Не можем да се свържем с uwp приложение StreamSocketListener от друго приложение или процес, работещ на същата машина, това не е разрешено. Нито дори с изключение за loopback.

Моля, уверете се също, че Internet(Client&Server) възможността е активирана . И на клиента можете да пингвате сървъра 192.168.0.5 успешно.

person Sunteen Wu    schedule 08.11.2016
comment
Благодаря, не разбрах, че не мога да ги пусна на една и съща машина. Защо така? Ще се оправи ли? - person Seth Kitchen; 08.11.2016
comment
@SethKitchen, това не е грешка, това е проектирано. Това е ограничено от изолацията на мрежата. Може да е от съображения за сигурност. - person Sunteen Wu; 09.11.2016
comment
Прочетох тази бележка Като част от мрежовата изолация, системата забранява установяването на връзки към сокет (Sockets или WinSock) между две UWP приложения, работещи на една и съща машина чрез локалния адрес за обратна връзка (127.0.0.0) или изрично посочване на локалния IP адрес на docs.microsoft.com/en-us/windows/uwp/networking/sockets - но защо не мога да се свържа от приложение, което не е UWP, като локален браузър? Не разбирам какъв всъщност е проблемът със сигурността, особено когато не позволяват използването на IP адрес и отварянето на поне някакъв порт на защитната стена - person George Birbilis; 24.08.2017