2012-10-14 5 views
3

Ok, donc je fais quelque chose qui semble être très facile. Essentiellement, j'essaie d'ouvrir une connexion ServerSocket, puis j'attends que le client se connecte.Comment ouvrir une ServerSocket dans mon application android?

Voici mon code.

ServerSocket serverSocket = new ServerSocket(6543); 
Socket clientSocket = serverSocket.accept(); 

Chaque fois que mon frappe code, serverSocket.accept() ;, je lance l'exception suivante.

bind failed: EADDRINUSE (Address already in use) 

Alors, évidemment, ma prochaine étape était de vérifier et de voir si un autre port fonctionnerait, mais ce n'était pas le cas. Ensuite, j'ai redémarré l'appareil et essayé d'exécuter l'application et j'ai eu la même exception. J'ai donné à mon application INTERNET la permission et l'appareil est enraciné.

Voici mes interfaces réseau qui apparaissent.

lo: ::1%1 
lo: 127.0.0.1 
eth0: //IPV6 address 
eth0: 192.168.1.127 

EDIT 1

Voici les informations d'objet serverSocket que je reçois lors du débogage.

ServerSocket[addr=192.168.1.121/192.168.1.121,port=0,localport=1234] 

EDIT 2

Je les constructeurs disponibles ci-dessous dans mon ServerSocket

new ServerSocket(int port) 
new ServerSocket(int port, int backlog) 
new ServerSocket(int port, int backlog, InetAddress localAddress) 

J'ai essayé d'utiliser le 3ème constructeur et même exception.

new ServerSocket(4567, 0, InetAddress.getLocalHost()); 
+0

Bon, laissez-moi savoir comment ça se passe! –

+0

Oui, je n'ai rien dans la documentation, j'ai aussi fait demi-tour et testé cela sur un téléphone et l'émulateur et j'ai reçu la même exception. – meanbunny

+0

Si vous supprimez serverSocket.accept(), cela fonctionne-t-il? –

Répondre

1

Bien sur, donc je enfin compris pourquoi ma demande a été lancer une exception et si quelqu'un a des commentaires à ce sujet ou souhaite apporter une réponse à pourquoi ce qui se passait. Je l'apprécierais grandement. Donc, dans mon thread que j'ai créé, j'ai besoin de poster sur le thread principal pour mettre à jour certains TextView basés sur ce qui se passait avec la connexion au serveur. Puisque je ne peux pas mettre à jour le thread principal à partir de mon thread créé moi-même, j'ai besoin d'ajouter un objet Handler à ce thread afin de mettre à jour l'interface utilisateur. La suppression de ce gestionnaire a complètement permis à mon application de créer le serveur ServerSocket sans générer d'exception.

Est-ce que le gestionnaire gère d'une certaine manière le code avant la main ou ce qui se passait ici?

Le code.

RemoteServerRunnable test = new RemoteServerRunnable(); 
Handler handler = new Handler(); 
handler.post(test); 
test.start(); 
+0

+1 de moi encore: D Faites attention. –

+0

Merci, c'était difficile! – meanbunny

Questions connexes