2017-08-08 198 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