válido visual tutorial tiene studio seleccione proyecto para necesarios los español emulador ejecutar dispositivo deploy conectar compilacion celular aplicación antes android tcp connection nat

visual - xamarin deploy to android device



Cómo hacer dos dispositivos Android para comunicarse a través de TCP. (5)

¿Es este un problema para crear un socket TCP?

La respuesta es no, no lo hace imposible (a menos que los NAT tengan una forma impredecible de asignar direcciones IP). Sin embargo, no es fácil de lograr.

La respuesta corta es que siempre necesitará un igual de servidor con una dirección IP pública para facilitar la comunicación inicial entre los pares ubicados detrás de los NAT. Los compañeros se conectan a ella. A le dice al servidor que quiere que TCP se conecte con B. El servidor notifica a B. Se realiza un análisis de comportamiento de NAT y, si es posible, A y B intentan abrir las comunicaciones de TCP entre sí prediciendo la siguiente asignación del otro NAT. Si todo va bien (y normalmente lo hace) A toca la base con B o viceversa. Cierran los otros intentos de conexión y se comunican con la conexión TCP operacional. Esta técnica se llama STUN para TCP.

Ahora, hay razones más complicadas por las que las cosas pueden salir mal. Si desea saber más, he escrito un libro llamado Practical JXTA II que está disponible para leer en línea en Scribd. Hay un capítulo dedicado a NAT transversal.

Espero que esto ayude.

Queremos establecer una conexión TCP / IP entre dos dispositivos Android. Por ahora pensamos que sería más sencillo si hiciéramos la conexión dispositivo a dispositivo. Así que no hay ningún servidor que esté entre los dos teléfonos.

La mayoría de las veces (si no siempre) uno no tiene una dirección IP real (NAT, etc.). ¿Es este un problema para crear un socket TCP? No logré encontrar ninguna información exacta para esto. Cualquier consejo y opinión serán muy apreciados.

Gracias


Bueno, para hacer un socket TCP, un dispositivo debe estar escuchando y el otro conectado. Sin embargo, en un escenario del mundo real, lo que usted describe es algo difícil. Como si se comunicara a través de una red celular entre dos teléfonos, no me sorprendería que la red no permitiera las conexiones entrantes a un teléfono de esa manera y solo se conectara la zona de IP de cada teléfono. Entonces, si bien dos teléfonos pueden estar en el mismo rango de IP de subred, es posible que no estén en la misma red física, lo que hace que todo el problema de enrutamiento sea casi imposible.

Si tiene el control de la red y está usando Wifi y está usando sus propios dispositivos IP dentro de su red, debería poder hacer esto como cualquier otro zócalo TCP del servidor cliente.


Es posible pero puedes experimentar algunos problemas. En primer lugar, debe conocer la dirección pública del host con el que desea contactar, y si sus dos hosts están en redes NATTED diferentes, debe hacerlo utilizando algún servidor (como lo hace en telefonía SIP). Luego, debe esperar que el host contactado esté detrás de un NAT "bueno" como "cono lleno" o similar y no detrás de un NAT "malo" como "simétrico" que no permita la conexión entrante. El hecho de que use una conexión TCP en lugar de un datagrama UDP puede ayudarlo debido al protocolo de tres vías. De hecho, la mayoría de los enrutadores NAT aceptan la conexión TCP entrante, pero no los paquetes UDP entrantes.


Si ambos nodos no tienen IP globales, y no están físicamente en la misma red, entonces es imposible comunicarse a través de TCP sin un servidor, a menos que haya creado un servidor de control que actúe como retransmisión para informar a los nodos sobre cualquier cambio. ocurriendo en el otro lado


Un dispositivo detrás de un NAT no es un problema. El requisito es: el servidor debe ser accesible por el cliente.

Estoy usando Apache Mina para manejar las conexiones TCP. Realmente ha hecho mi vida más fácil. Se puede utilizar tanto en el cliente como en el servidor. Darle una oportunidad...