2017-08-08 193 views
0

目前我即将弄清楚,我在Windows 10 IoT Core上的UWP应用程序中直接遇到的问题是WiFi。目标是让StreamSocketListener接受来自WiFi-direct的传入连接。这适用于我制作的第一个连接,对StreamSocketListener的第二个请求破坏了WiFi直接会话并断开连接。作为一个方面说明,我必须使用带SSID和密码短语的传统WiFi-Direct实施。下面是一些示例代码UWP WiFi-Direct在第二次传入StreamSocketListener连接后断开连接

wifi直连出版商

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事件处理

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断开连接。我错过了什么或有过错?

感谢咨询

+0

什么是你的Windows iot核心设备? –

+0

带有最新版本的Windows 10 iot核心的raspberrypi 3。 – andy

+0

你使用板载WiFi或外部WiFi适配器吗? –

回答

0

如果建立在相同的端口号(使用“80”),你可能会得到下面的异常多的连接:

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

所以你需要指定不同的端口号为每个连接请求。

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

+0

谢谢,我知道这一点,但不是我的问题。当我设置WiFi Direct Publisher并运行StreamSocketListener(在我的情况下,在端口80上)时,我可以连接一个设备,例如智能手机通过WiFi直接选择SSID并输入密码。连接已建立,我可以向StreamSocketListener发送请求。但是当我尝试对StreamSocketListener进行第二次请求时,WiFi直接连接会被我的树莓上的应用程序破坏。 – andy

+0

你有任何异常或错误? –

+0

可悲的是,没有例外或其他错误。我正在连接一部电话并发送一个请求,该请求完成得很完美。然后我发送另一个请求,什么也没有发生,如果我然后看看我的“OnConnectionStatusChanged”EventHandler我看到“WiFiDirectConnectionStatus”断开。 – andy