2015-12-23 13 views
5

Possiedo un'applicazione universale di Windows che dovrebbe funzionare come un server TCP.Impossibile accedere al server TCP all'interno di un'applicazione universale Windows

m_Listener = new StreamSocketListener(); 
m_Listener.ConnectionReceived += (s, e) => ProcessRequestAsync(e.Socket); 
var bind = m_Listener.BindServiceNameAsync("8080").Wait(); 

Prima di avviare l'applicazione, la porta non è strettamente legato a nulla:

C:\Users\jsant>netstat -a | grep 8080 
^C (Cancelled after some seconds because no reasults were found) 

Poi, quando inizio l'applicazione:

C:\Users\jsant>netstat -a | grep 8080 
    TCP 0.0.0.0:8080   Laptop:0  LISTENING 

Così il socket è in ascolto sul mio computer ! Cercando di accedere in qualche modo, si traduce in un errore

C:\Users\jsant>telnet 127.0.0.1 8080 
Connecting To 127.0.0.1...Could not open connection to the host, on port 8080: Connect failed 
C:\Users\jsant>telnet 192.168.1.167 8080 
Connecting To 192.168.1.167...Could not open connection to the host, on port 8080: Connect failed  
C:\Users\jsant>telnet Laptop 8080 
Connecting To Laptop...Could not open connection to the host, on port 8080: Connect failed  
C:\Users\jsant>telnet localhost 8080 
Connecting To localhost...Could not open connection to the host, on port 8080: Connect failed 

ho attivato tutte le capacità per rimuovere che come una possibile ragione.

Lo stesso codice in esecuzione su un'applicazione console funziona correttamente.

Inoltre, l'esecuzione dell'esempio MS da https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/DatagramSocket ha avuto lo stesso risultato. All'interno dell'applicazione la presa era visibile, fuori, no!

Esiste qualche limitazione nell'esecuzione di un server in un'applicazione universale di Windows o mi manca qualcosa?

Grazie!

Joao

Edit penso che non era abbastanza chiaro. Il mio problema è l'accesso al server TCP da un'applicazione esterna esterna. L'applicazione può essere un telnet, un browser Web, ecc. Il server si trova all'interno di Windows Universal App.

Modifica # 2
Ho passato l'ultima ora cambiare questo esempio: https://ms-iot.github.io/content/en-US/win10/samples/BlinkyWebServer.htm e funzionante nel mio Raspberry Pi 2 sono stato in grado di accedere al server web dal mio computer. Non riuscivo a connettermi eseguendo la stessa applicazione sul mio computer. Questo è davvero strano!

Modifica n. 3 Ho modificato la mia applicazione, lasciato solo la funzionalità Internet (Client &) e nessuna dichiarazione. Funzionando nel Raspberry Pi funziona perfettamente, nel mio computer locale, ancora senza fortuna (locale o remoto). E sì, il firewall è disabilitato :). Sulla base dei commenti di Jared, dove conferma lo stesso problema con il suo computer, questo mi sembra un bug. Continuerò a indagare.

Modifica n. 4 dopo aver appreso il comando "CheckNetIsolation", aggiungendo la funzionalità "PrivateNetworkClientServer" mi ha permesso di avere accesso da un dispositivo esterno. Ancora, impossibile accedervi dal computer locale (anche con una regola LoopbackExempt aggiunta)

+0

http://stackoverflow.com/questions/17833232/cannot-connect-to-localhost-in-windows-store-application –

risposta

0

Non sono sicuro che telnet possa funzionare anche per la connessione a un StreamSocketListener. Non l'ho mai provato. Prova a usare il sotto e fammi sapere se funziona. Ho cambiato leggermente la chiamata per legare l'ascoltatore poiché questo è il modo in cui ho funzionato nel mio setup. Inoltre, tieni presente che il loopback di rete locale come questo funzionerà nel debug, ma non funzionerà con le app del negozio pubblicate.

Se funziona, si dovrebbe ottenere una finestra di dialogo che mostra che l'evento ConnectionReceived è stato attivato. :) Spero possa aiutare!

m_Listener = new StreamSocketListener(); 
m_Listener.ConnectionReceived += (s, e) => ProcessRequestAsync(e.Socket); 
await m_Listener.BindServiceNameAsync("8080"); 

var ss = new StreamSocket(); 
await ss.ConnectAsync(new HostName("127.0.0.1"), 8080); 

private async void ProcessRequestAsync(StreamSocket e) 
{ 
    await new MessageDialog("Connection received!", "New Connection").ShowAsync(); 
    // The rest of your code goes here. 
} 
+0

Grazie Jared, tuttavia, il mio problema non si collega all'ascoltatore dalla stessa applicazione, Questo lo so che funziona senza alcun problema. Il problema qui è la connessione da un'altra applicazione (client/server). – JoaoSantos

+0

Per quanto riguarda il Telnet, so che funziona perché ho testato lo stesso codice esatto da una semplice applicazione console (non Windows universale) – JoaoSantos

+0

Ciao, Joao. Ho provato a provare a connettermi a UWP StreamSocketListener con un'app WPF usando i socket e non funziona. Lo stesso server accetta le connessioni da un altro computer tramite un client UWP. Questo mi porta a credere che tu debba utilizzare le API socket UWP per connettersi al server UWP. – Jared

0

Hai provato a abilitare la funzionalità di rete privata sul tuo UWP? Lo uso per un progetto simile.

Penso che sia necessaria questa funzionalità se si desidera gestire una connessione di rete locale.

+0

Sì, l'ho già fatto (Modifica n. 4). Mi sono permesso di accedere all'applicazione da un altro dispositivo all'interno della mia rete, ma ancora senza fortuna con localhost. Ho anche provato ad aggiungere un LoopbackExempt per l'applicazione, ma con lo stesso risultato. – JoaoSantos

0

Consenti loopback di rete locale in "Progetto -> Proprietà -> Debug -> Consenti loopback di rete locale".

Problemi correlati