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
Potete mostrare un po 'di codice? Hai impostato il permesso giusto nel file manifest? – Flo
Ho aggiornato la domanda con un po 'di codice. Sì, ho impostato il permesso INTERNET nel manifest. – shuwo
'ServerSocket.accept()' non può restituire null. – EJP