2010-07-09 7 views
1

J'ai essayé de connecter deux appareils Android (2.1) via des sockets TCP. La partie essentielle du code:connexion de deux appareils Android via des sockets TCP

Serveur: ServerSocket serverSocket = new ServerSocket (SERVERPORT);

Client: Socket socket = nouveau Socket (serverAddr, SERVERPORT); La chose étrange est que je peux le faire fonctionner si le client est un émulateur, mais le même code échoue si les deux exécutent sur les périphériques réels. L'échec du côté client est:


java.net.SocketException: No route to host 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connectSocketImpl(Native 
Method) 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem. 
java:114) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
245) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
220) 
    at java.net.Socket.startupSocket(Socket.java:780) 
    at java.net.Socket.(Socket.java:314) 

J'ai essayé avec WIFI et réseau mobile aussi, ils étaient dans le même sous-réseau les deux fois, l'autorisation INTERNET est donnée, le serveur est adressé par son vrai 192.168 .. IP .
Je prévois de changer l'implémentation du socket avec setCustomSocketImplFactory().
Le problème est crucial dans le processus de mise en œuvre du protocole MSRP à Android.
Quelqu'un peut-il me donner quelques conseils?

+0

Que voulez-vous dire par IP réelle si les programmes en cours d'exécution sur deux téléphones mobiles? –

+0

Je viens d'essayer de dire que le problème n'est pas que j'utilise IP 10.0.2.15 pour les périphériques réels – Diepie

Répondre

1

Très peu de téléphones mobiles ont des adresses IP routables publiquement. La plupart sont derrière le NAT.

Vous voudrez peut-être envisager d'utiliser à la place C2DM:

http://code.google.com/android/c2dm/

+0

Merci pour la suggestion, il n'y a pas besoin d'adresses IP routables globalement, car il existe des solutions RFC-compatibles pour NAT- traversal (STUN, TOUR, ICE, etc.). – Diepie