2010-10-27 7 views
4

J'essaye de configurer à ServerSocket sur mon téléphone androïde, et envoie un char ou int ou n'importe quoi de mon ordinateur.ServerSocket accept() n'accepte pas les connexions sur Android

Le code sur le téléphone crée un ServerSocket puis bloque en attendant une connexion:

ServerSocket serverSocket = ServerSocketFactory.getDefault() 
          .createServerSocket(4444); 
Log.d("HostThread", "ServerSocket created:"+serverSocket 
          .getInetAddress().getHostAddress()); 
Socket socket = serverSocket.accept(); 

(Le journal dit « 10-27 11: 41: 43,437: DEBUG/HostThread (23957): ServerSocket créé: 0.0.0.0")

Un peu de code simple en cours d'exécution sur mon PC tente de se connecter au téléphone:

Socket s = new Socket("xx.xx.xx.xx", 4444); 

... (plus quelques autres bits si la prise est créé, mais je. Je ne reçois pas ce point, donc laissé dehors!)

Fondamentalement, le téléphone est en train d'accepter, et l'ordinateur ne se connecte pas. Le xx.xx.xx.xx est l'IP publique du téléphone que j'obtiens par programmation (et cela correspond à vérifier sur whatismyip.com).

J'ai défini l'autorisation INTERNET sur le téléphone. J'ai également été capable de faire cela en sens inverse (ServerSocket sur pc, client sur téléphone).

Des idées où je me trompe?

Répondre

3

L'exécutez-vous dans l'émulateur ou sur un périphérique réel? Pour autant que je sache, la plupart des réseaux opérateurs sont NAT et ne permettent pas les connexions aux périphériques. Cela peut être votre problème si vous utilisez un périphérique réel. Toutefois, si votre code ci-dessus n'est qu'un exemple - et que vous n'utilisez pas le port 4444, vous devez également savoir que la plupart des systèmes Unix (y compris Android) n'autorisent pas les connexions entrantes sur les ports inférieurs à 1024. , sauf si vous avez les permissions root.

+0

Je cours sur un vrai appareil, connecté à mon réseau mobile. Êtes-vous en train de dire qu'il est impossible d'autoriser les connexions entrantes comme celle-ci? – lukeo05

+0

@ lukeo05 Impossible en fonction de votre opérateur de réseau :) Demandez à votre opérateur, ils devraient savoir! –

+0

Je suppose que c'est possible sur Wifi? Cela semble être ma seule option si l'opérateur de réseau dit NON! – lukeo05