2010-08-28 7 views
11

Sto provando ad ascoltare su una porta utilizzando ServerSocket su un dispositivo Android. Voglio essere in grado di connettermi a questa porta tramite WiFi utilizzando un computer sulla stessa rete.Impossibile utilizzare ServerSocket su Android

non ottengo alcuna eccezione quando legandolo a una porta, ma quando posso controllare netstat che dice:

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

Ho provato innumerevoli modi di legame a localhost, 0.0.0.0, il Wi-Fi LAN IP indirizzo del dispositivo con SocketInetAddress e InetAddress.getByName. Niente sembra funzionare.

Quando provo a collegarlo alla porta da un computer nello stesso WiFi (Ho provato sia netcat e Java di Socket.connect()), tutto quello che posso vedere in Wireshark è una richiesta ARP:

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

Questo richiedere la ripetizione stessa fino al timeout.

Ho provato la modalità inversa, impostando il ServerSocket sul computer e connettendomi a quella porta dal telefono, che funziona molto bene.

Il mio telefono di prova è un Samsung Spica i5700 con una ROM personalizzata.

Qualche idea?

Edit: Il codice è semplice come questo:

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

Potete mostrare un po 'di codice? Hai impostato il permesso giusto nel file manifest? – Flo

+0

Ho aggiornato la domanda con un po 'di codice. Sì, ho impostato il permesso INTERNET nel manifest. – shuwo

+0

'ServerSocket.accept()' non può restituire null. – EJP

risposta

0

ero in grado di ottenere questo lavoro utilizzando

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

dove addr = InetAddress del telefono. Altrimenti, sembra solo collegarsi a localhost (127.0.0.1). Inoltre, sto usando la porta 8080.

+0

Come si trova l'indirizzo Inet del telefono? – JPM

+0

Se ometti l'argomento hostname o passi 'null', dovrebbe legarsi a' 0.0.0.0'. – EJP