2015-09-19 4 views
2

Я пытаюсь подключиться к StreamSocketListener в своем приложении Windows 10. Это работает, если клиентский сокет находится внутри одного и того же приложения. Но если я попытаюсь подключиться из другого приложения (например, Putty), это не сработает. Через несколько секунд шпатлевка говорит «Ошибка сети: отказ в соединении».Не удается подключиться к StreamSocketListener

Вот мой пример кода:

public sealed partial class MainPage : Page 
{ 
    private StreamSocketListener listener; 

    public MainPage() 
    { 
     this.InitializeComponent(); 

     listener = new StreamSocketListener(); 
     listener.ConnectionReceived += Listener_ConnectionReceived; 
     listener.BindServiceNameAsync("12345").AsTask().Wait(); 
    } 

    private async void Listener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) 
    { 
     Debug.WriteLine("new connection"); 

     string message = "Hello World!"; 

     using (var dw = new DataWriter(args.Socket.OutputStream)) 
     { 
      dw.WriteString(message); 
      await dw.StoreAsync(); 
      dw.DetachStream(); 
     } 
    } 

    private async void Button_Click(object sender, RoutedEventArgs e) 
    { 
     // Test connection 
     var serverHost = new HostName("localhost"); 
     var socket = new StreamSocket(); 

     await socket.ConnectAsync(serverHost, "12345"); 

     using (var dr = new DataReader(socket.InputStream)) 
     { 
      dr.InputStreamOptions = InputStreamOptions.Partial; 

      await dr.LoadAsync(12); 
      var input = dr.ReadString(12); 

      Debug.WriteLine("received: " + input); 
     } 
    } 
} 

В XAML я добавил кнопку, чтобы проверить подключение клиента.

В манифесте я проверил «Интернет (Клиент)», «Интернет (Клиент & Server)» и «Частные сети (Клиент & Server)».

EDIT: Я пытаюсь подключиться на одном компьютере. Брандмауэр отключен.

+0

Порт открыт? Брандмауэр отключен? – Fruchtzwerg

ответ

10

Вы не можете подключиться к StreamSocketListener из другого приложения или процесса, запущенного на том же компьютере, даже с loopback exemption. Вам нужно будет запустить клиент на другой машине.

+0

Можете ли вы прокомментировать, почему мы не можем подключиться к StreamSocketListener, если существует исключение loopback? Тогда какова точка освобождения от шлейфа? Есть ли какой-либо другой способ подключения к сокету на UWP, который будет затрагивать проблемы безопасности? – BitBot

+1

Это был бы лучший вопрос для форумов MSDN. В настоящее время исключение loopback позволяет только приложениям UWP подключаться к серверам, работающим на локальном компьютере. – kiewic

+1

Вот что мне не хватало. Я прочитал об исключении loopback и предположил, что он разрешает соединения в обоих направлениях. Я не видел, чтобы он документировал где-либо, что это исключение позволяет только UWP-приложению подключаться к серверу, но не действовать как сервер. – BitBot

0

Вы можете подключиться к серверному приложению localhost UWP только при отключении брандмауэра Windows (через панель управления) перед запуском приложения, а затем выйти из службы брандмауэра («net stop MpsSvc» из командной строки с повышенными правами) после приложение было запущено. Loopbackexemption не позволяет подключение к UWP приложений, только из UWP приложений, в моем опыте, по крайней мере ...

рассматривает

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