ConnectionReceived 从未调用过

ConnectionReceived never called

没有抛出异常,也没有拒绝连接。所以我可能在创建线程时做错了。

// UI Thread
Task.Run(() => CreateRoom());
// ...

public async void CreateRoom()
{
    StreamSocketListener _listener = new StreamSocketListener();
    _listener.ConnectionReceived += ParsePackets;
    await _listener.BindServiceNameAsync("5000");
}

private void ParsePackets(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
    Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
    {
        var messageDialog = new MessageDialog("Player joined.");
        messageDialog.ShowAsync();
    });
}

StreamSocketListener 不支持来自同一机器中其他进程的连接。甚至没有 loopback exemption.

尝试从另一台设备或同一应用连接。

kiewic 的回答在一台机器上对我有用,但在另一台机器上却行不通。事实证明,这台机器上有一个虚拟机,它有一个虚拟以太网适配器。 StreamSocketListener 正在监听这个虚拟适配器,我无法从另一台机器连接到虚拟适配器。删除虚拟以太网适配器解决了这个问题。

我通过在 msdn page about troubleshooting network isolation issues 上使用 "CheckNetIsolation" 工具解决了这个问题。

只是想添加这个答案以防 kiewic 的答案不起作用。