2012-03-04 14 views
5

Estoy escribiendo un control remoto C# para mi reproductor multimedia. Se ejecuta en mi teléfono Android.Comunicación TCP simple con una computadora detrás de un enrutador

Tengo una aplicación de cliente que escucha conexiones TCP en mi computadora que, una vez que se ha establecido una conexión, procesa comandos (subir volumen, bajar volumen, ...). Probé esa parte usando telnet 127.0.0.1 en mi computadora, y funciona muy bien.

Las cosas son más complicadas cuando se trata de conectarme desde mi teléfono, ya que no está en la misma red (no tengo Wi-Fi, solo conexiones con cable), así que no estoy seguro de cómo proceder. Básicamente quiero conectarme a una computadora que está detrás de un enrutador.

¿Debo preferir alojar el servidor TCP en mi teléfono y hacer que la PC se conecte? Tome IRC como ejemplo: aunque estoy detrás de un enrutador, puedo conectarme a servidores externos, sin reenvío de puertos. O si hospedar el servidor en mi computadora está bien, ¿cómo me conecto?

Todavía no entiendo todo esto, así que no dude en corregirme si tengo algún error.

+0

"Tengo una aplicación cliente escuchando conexiones TCP" ... Creo que te refieres a una aplicación _server_. Los clientes se conectan a servidores, los servidores esperan conexiones. :) –

Respuesta

5

cosas son más difíciles cuando se trata de conectar desde mi teléfono, ya que que no está en la misma red (no tengo Wi-Fi, sólo el cable conexiones), así que no estoy seguro de cómo proceder. Básicamente quiero conectar a una computadora que está detrás de un enrutador.

Lo que quiere lograr es posible, pero necesita aprender sobre NAT transversal y perforaciones.

La mayoría de las veces, los dispositivos detrás de un NAT/enrutador tienen una dirección IP privada solo válida en la LAN. Los dispositivos remotos no pueden adivinarlo. Esta dirección privada se traduce en una dirección IP pública por NAT cuando el dispositivo desea comunicarse con la WAN.

La solución fácil es que puede dar una dirección IP pública al dispositivo detrás de la NAT. En este caso, los dispositivos remotos en la WAN podrán alcanzarlo fácilmente, porque su dirección es pública.

+2

Entonces, ¿cómo se le da una dirección IP pública a un dispositivo detrás de una NAT? – Trilarion

6

Sería más lógico que la PC aloje el servidor y configurar su enrutador para reenviar las conexiones a su PC. Tiene dos opciones:

  • establecer un DMZ: todas las conexiones entrantes en el router serán remitidos a un solo PC. Esto es más fácil cuando solo tiene 1 PC en la red que necesita aceptar conexiones.
  • Configure port forwarding: puede indicar al enrutador que reenvíe las conexiones entrantes en el puerto X a la IP Y en el puerto Z. De esta forma, varias PC pueden listar conexiones (usando diferentes puertos en el enrutador). También es un poco más seguro.

Cómo configurar esto depende de su enrutador, pero la mayoría de los enrutadores solo aceptan conexiones en su puerto 80 y ofrecen una interfaz web sencilla. Si le da la marca de su enrutador, podemos vincularlo con el manual.

+2

¿Pero cómo funcionan las conexiones de IRC? ¿Cómo es que no necesito el reenvío de puertos para IRC? (¿O incluso HTTP?) –

+0

Gracias por su respuesta por cierto.Configuré el reenvío de puertos y todo funciona correctamente; pero eso hace que la aplicación no sea sencilla. ¿No hay manera de evitar el reenvío de puertos? –

+2

No necesita reenvío de puertos para IRC, ya que es su PC la que se conecta a IRC. Su enrutador verá que su PC intenta conectarse, y usa NAT (Traducción de direcciones de red) para transferir los paquetes que regresan del servidor a su PC. – Konerak

Cuestiones relacionadas