第二次传入StreamSocketListener连接后,UWP WiFi-Direct断开连接

时间:2017-08-08 13:19:16

标签: c# uwp win-universal-app wifi-direct windows-10-iot-core

目前我即将弄明白,在Windows 10 IoT核心版的UWP应用中,我的WiFi问题是什么。目标是让StreamSocketListener接受来自WiFi-direct的传入连接。这适用于我的第一个Connection,第二个StreamSocketListener请求会破坏WiFi-direct会话并断开连接。作为旁注,我必须使用具有SSID和密码短语的传统WiFi-Direct实现。这是一些示例代码

WiFi Direct发布商

WiFiDirectAdvertisementPublisher _publisher = new WiFiDirectAdvertisementPublisher();
_publisher.StatusChanged += OnStatusChanged;

WiFiDirectConnectionListener _listener = new WiFiDirectConnectionListener();

try
{
    _listener.ConnectionRequested += OnConnectionRequested;
}
catch
{
    return;
}

_publisher.Advertisement.ListenStateDiscoverability = WiFiDirectAdvertisementListenStateDiscoverability.Normal;

_publisher.Advertisement.IsAutonomousGroupOwnerEnabled = true;
_publisher.Advertisement.LegacySettings.IsEnabled = true;

PasswordCredential creds = new PasswordCredential();
creds.Password = passphrase;
_publisher.Advertisement.LegacySettings.Passphrase = creds;
_publisher.Advertisement.LegacySettings.Ssid = ssid;

_publisher.Start();

if (_publisher.Status == WiFiDirectAdvertisementPublisherStatus.Started)
{
    // OK
}
else
{
    // Error
}

OnConnectionRequested EventHandler

WiFiDirectConnectionRequest connectionRequest = connectionEventArgs.GetConnectionRequest();

WiFiDirectDevice wfdDevice = null;

try
{
    wfdDevice = await WiFiDirectDevice.FromIdAsync(connectionRequest.DeviceInformation.Id);
}
catch
{
    //
}

wfdDevice.ConnectionStatusChanged += OnConnectionStatusChanged;

listEndpointPairs = wfdDevice.GetConnectionEndpointPairs();

StreamSocketListener

_listener = new StreamSocketListener();
await _listener.BindEndpointAsync(listEndpointPairs[0].LocalHostName, "80");
listener.ConnectionReceived += (sender, args) => ConnectionReceivedHandler(args);

正如我之前所说,它运行良好,但是我无法向StreamSocketListener发送第二个请求,如果我这样做,则WiFi-direct Connection会断开连接。我错过了什么或犯了错吗?

感谢您的建议

2 个答案:

答案 0 :(得分:0)

如果您在同一端口号上设置多个连接(使用" 80"),您可能会遇到以下异常:

Only one usage of each socket address (protocol/network address/port) is normally permitted.

因此,您需要为每个连接请求分配不同的端口号。

或者您可以使用空字符串而不是指定的数字,然后系统将为您分配唯一的端口号。您可以参考here

答案 1 :(得分:0)

我认为这已经解决了,因为MS写道在构建17110(当前测试版)的更新日志中已知以下问题

The IoTCore device has to be the connecting device – it will not work as the advertising device with another device initiating the connection.

所以似乎目前无法做到这一点。

相关问题