2017-08-08 8 views
0

Momentan bin ich dabei herauszufinden, was mein Problem mit WiFi direkt in einer UWP App auf Windows 10 IoT Core ist. Das Ziel besteht darin, einen StreamSocketListener eingehende Verbindungen von WiFi-direkt annehmen zu lassen. Dies funktioniert gut für die erste Verbindung, die ich mache, die zweite Anfrage an den StreamSocketListener zerstört die WiFi-Direkt-Sitzung und trennt die Verbindung. Als Randnotiz muss ich die alte WiFi-Direct-Implementierung mit SSID und Passphrase verwenden. Hier ist ein BeispielcodeUWP WiFi-Direct trennt die Verbindung nach dem zweiten eingehenden StreamSocketListener Verbindung

WiFi Direkt Verlag

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); 

Wie ich schon sagte, es funktioniert gut, aber ich kann nicht senden eine zweite Anfrage an den StreamSocketListener, wenn ich es tue, die WiFi-Direktverbindung wird getrennt. Vermische ich etwas oder mache einen Fehler?

Vielen Dank im Rat

+0

Was ist Ihr Windows-iot-Kerngerät? –

+0

A raspberrypi 3 mit dem neuesten Build von Windows 10 iot core. – andy

+0

Verwenden Sie Onboard-WLAN oder externen WLAN-Adapter? –

Antwort

0

Wenn stellen Sie Multi-Verbindungen auf dem gleichen Port-Nummer (Sie „80“) können Sie die folgende Ausnahme aufstehen:

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

So müssen Sie verschiedene Ports Nummer zuweisen für jede Verbindungsanfrage.

Oder Sie können eine leere Zeichenfolge anstelle der angegebenen Nummer verwenden, dann weist Ihnen das System eine eindeutige Portnummer zu. Sie können auf here verweisen.

+0

Danke, ich weiß das, aber es ist nicht mein Problem. Wenn ich den WiFi Direct Publisher einrichte und den StreamSocketListener (in meinem Fall an Port 80) starte, kann ich mich mit einem Gerät verbinden, z. ein Smartphone über WiFi Direct durch Auswahl der SSID und Eingabe der Passphrase. Die Verbindung wird hergestellt und ich kann eine Anfrage an den StreamSocketListener senden. Aber wenn ich versuche, eine zweite Anfrage an den StreamSocketListener zu richten, wird die WiFi Direct Connection von der App auf meiner Himbeere zerstört. – andy

+0

Haben Sie eine Ausnahme oder einen Fehler? –

+0

Leider nein, es gibt keine Ausnahme oder anderen Fehler. Ich verbinde mich mit einem Telefon und sende eine Anfrage, die perfekt gemacht wird. Dann sende ich eine andere Anfrage und nichts passiert, wenn ich dann auf meine "OnConnectionStatusChanged" EventHandler schaue, sehe ich, dass der "WiFiDirectConnectionStatus" getrennt wird. – andy

Verwandte Themen