2012-03-04 13 views
5

Sto scrivendo un telecomando C# per il mio lettore multimediale. Funziona sul mio telefono Android.Comunicazione TCP semplice con un computer dietro un router

Ho un'app client che sta ascoltando connessioni TCP sul mio computer che, una volta stabilita una connessione, elabora i comandi (Volume su, volume giù, ...). Ho provato quella parte usando telnet 127.0.0.1 sul mio computer, e funziona benissimo.

Le cose sono più complicate quando si tratta di connettersi dal mio telefono, dal momento che non è sulla stessa rete (non ho Wi-Fi, solo connessioni cablate), quindi non sono sicuro di come procedere. Fondamentalmente voglio collegarmi a un computer dietro un router.

Dovrei piuttosto ospitare il server TCP sul mio telefono e avere il PC connesso? Prendiamo IRC come esempio: sebbene io sia dietro un router, posso connettermi ai server all'esterno, senza il port forwarding. O se l'hosting del server sul mio computer va bene, come ci si connette ad esso?

Non capisco ancora tutto, quindi sentitevi liberi di correggermi se ho qualcosa che non va.

+0

"Ho un'app client che ascolta connessioni TCP" ... Penso che tu intenda un'app _server_. I client si connettono ai server, i server attendono le connessioni. :) –

risposta

5

Le cose sono più difficili quando si tratta di collegamento dal mio telefono, in quanto che non è sulla stessa rete (non ho la connessione Wi-Fi, cablate solo connessioni), quindi non sono sicuro di come procedere. Fondamentalmente voglio connettere a un computer dietro un router.

Ciò che si desidera ottenere è possibile, ma è necessario conoscere il NAT traversal e la perforazione.

Molto spesso, i dispositivi dietro un NAT/Router hanno un indirizzo IP privato valido solo sulla LAN. I dispositivi remoti non possono indovinarlo. Questo indirizzo privato viene tradotto in un indirizzo IP pubblico dal NAT quando il dispositivo desidera comunicare con la WAN.

La soluzione semplice è che è possibile fornire un indirizzo IP pubblico al dispositivo dietro il NAT. In questo caso, i dispositivi remoti sulla WAN saranno facilmente in grado di raggiungerlo, perché il suo indirizzo è pubblico.

+2

Quindi, come si può dare un indirizzo IP pubblico a un dispositivo dietro un NAT? – Trilarion

6

Sarebbe più logico mantenere il PC che ospita il server e configurare il router per l'inoltro delle connessioni al PC. Sono disponibili due opzioni:

  • stabilire un DMZ: tutte le connessioni in entrata sul router verranno inoltrate a un solo PC. Questo è più semplice quando hai solo 1 PC sulla rete che deve accettare connessioni.
  • Configura port forwarding: è possibile indicare al router di inoltrare le connessioni in ingresso sulla porta X a IP Y sulla porta Z. In questo modo, più PC possono elencare le connessioni (utilizzando diverse porte sul router). È anche un po 'più sicuro.

Come impostarli dipende dal router, ma la maggior parte dei router accetta solo connessioni sulla porta 80 e offre un'interfaccia Web facile. Se fornisci il marchio del tuo router, possiamo collegarti al manuale.

+2

Ma come funzionano le connessioni IRC? Come mai non ho bisogno di port forwarding per IRC? (O anche HTTP?) –

+0

Grazie per la risposta btw.Ho impostato il port forwarding e tutto funziona correttamente; ma ciò rende l'app tutt'altro che semplice. Non c'è modo di fare senza port forwarding? –

+2

Non è necessario il port forwarding per IRC, perché è il PC che si connette a IRC. Il router vedrà che il PC tenta di connettersi e utilizza NAT (Network Address Translation) per trasferire i pacchetti di ritorno dal server al PC. – Konerak

Problemi correlati