2010-08-28 6 views
11

J'essaie d'écouter sur un port en utilisant ServerSocket sur un appareil Android. Je veux être en mesure de se connecter à ce port via WiFi en utilisant un ordinateur sur le même réseau.Impossible d'utiliser ServerSocket sur Android

je reçois pas d'exception lors de la liaison à un port, mais quand je vérifie netstat il dit:

Proto Recv-Q Send-Q Local Address   Foreign Address   State 
tcp  0  0 (null):4040    (null):*    LISTEN 

J'ai essayé d'innombrables façons de le liant à localhost, 0.0.0.0, le réseau local WiFi IP adresse de l'appareil avec SocketInetAddress et InetAddress.getByName. Rien ne semble fonctionner.

Lorsque je tente de se connecter au port à partir d'un ordinateur dans le même connexion Wi-Fi (je l'ai essayé à la fois netcat et Java de Socket.connect()), tout ce que je peux voir dans Wireshark est une requête ARP:

Who has [phone's LAN address]? Tell [computer LAN address]. 

Cette demande de se répéter jusqu'à expiration du délai.

J'ai essayé l'inverse, en réglant la ServerSocket sur l'ordinateur et en me connectant à ce port à partir du téléphone, cela fonctionne très bien.

Mon téléphone de test est un Samsung Spica i5700 avec une ROM personnalisée.

Des idées?

Edit: Le code est simple comme ceci:

ServerSocket server = new ServerSocket(); 
server.setReuseAddr(true); 
server.setTimeout(0); 
server.bind(new InetSocketAddress(4040)); 

Socket client = null; 
while((client = server.accept()) == null); 
// Connected 
enter code here 
enter code here 
+0

Pouvez-vous montrer un code? Définissez-vous la bonne autorisation dans le fichier manifeste? – Flo

+0

J'ai mis à jour la question avec du code. Oui, j'ai mis la permission INTERNET dans le manifeste. – shuwo

+0

'ServerSocket.accept()' ne peut pas renvoyer de valeur null. – EJP

Répondre

0

J'ai pu obtenir ce travail en utilisant

ServerSocket server = new ServerSocket(myTcpPort, 0, addr); 

où addr = InetAddress de votre téléphone. Sinon, il semble seulement lié à localhost (127.0.0.1). De plus, j'utilise le port 8080.

+0

Comment trouvez-vous l'InetAddress de votre téléphone? – JPM

+0

Si vous omettez l'argument hostname ou passez 'null', il devrait se lier à' 0.0.0.0 .' – EJP

0

je me débattais avec cela aussi et ne fut en mesure de se connecter à mon serveur en utilisant Android:

ServerSocket myServerSocket = new ServerSocket(); 
String hostname = getLocalIpAddress(); 
myServerSocket.bind(new InetSocketAddress(hostname, myPort)); 

Où le nom d'hôte était l'adresse IP locale, que je suis arrivé à l'aide du fonction getLocalIpAddress() de cette page:

https://github.com/Teaonly/android-eye/blob/master/src/teaonly/droideye/MainActivity.java

Questions connexes