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 的答案不起作用。
没有抛出异常,也没有拒绝连接。所以我可能在创建线程时做错了。
// 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 的答案不起作用。