Visualizzazione stampabile
-
Socket
Salve a tutti,ho un problema con il protocollo TCP IP
allora questo è il codice:
String host="192.168.0.6";
String buff="8888";
int porta;
porta=Integer.valueOf(buff).intValue();
try{
Socket socket = new Socket(host, porta);
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
String userInput = "ciao";
os.writeBytes(userInput + '\n');
os.close();
socket.close();
}catch(Exception e)
{}
PS: ho aggiunto al manifest xml
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
ok lasciate stare la semplicità xk ho ridotto il codice,ma mi genera sempre un eccezione alla creazione del pocket e quindi va nel catch,aiutatemiiiiiii!!!!!!!!!!!
-
-
Postare lo stack trace dell'errore potrebbe aiutare.
Oltre a questo, lo stai testando su un terminale o sull'emulatore ?
-
Quote:
Originariamente inviato da
pourquoipas
Postare lo stack trace dell'errore potrebbe aiutare.
Oltre a questo, lo stai testando su un terminale o sull'emulatore ?
Non i da nessun errore a mio parere..genera solo un'eccezione..comunque l'ho testato su telefono
-
Dovresti loggare l'errore nel catch, per come è il tuo codice ora prosegue senza segnalare nulla.
prova a mettere
codice:
}catch(Exception e) {
Log.d("TuaClasse", "Errore in gestione Socket", e);
}
e poi guarda cosa scrive nel logcat
-
ho sostituito tuaclasse con la mia classe ovvero ClientActivity ma nn vedo nessun errore nel logcat
-
forse questo:
07-01 16:44:31.790: W/InputManagerService(2102): Got RemoteException sending setActive(false) notification to pid 16784 uid 10179
-
Non mi pare, se lavori con eclipse ed un telefono prova a farlo andare in debug e mettere un breakpoint sull'istruzione Log.d(...) aggiunta, se si ferma vuol dire che effettivamente va in eccezione, a quel punto passa nel logcat e vedi se facendolo ripartire scrive qualcosa (dovrebbe, se non hai il filtro dei messaggi ad un livello maggiore di debug.
Altra soluzione per vedere l'errore è togliere tutto il blocco try/catch e far andare in errore il programma, poi sempre nel logcat dovresti avere lo stacktrace.
-
allora nel logcat sempre stesso errore...e cmq nn si può avviare un pocket senza try catch o throws Exception..nn capisco perché non va..se lo faccio da pc a pc funziona..
-
Sono andato a ripescare un test che avevo fatto tempo addietro ed è praticamente uguale (perdonami ma ho fatto un solo test un'anno e mezzo fa usando i socket sotto android, sono arrugginito :D)
codice:
public void tcpSend(String what) {
Socket s = null;
try {
// s = new Socket("192.168.0.144",6789);
int port = Integer.valueOf(textPort.getText().toString());
s = new Socket(textip.getText().toString(),port);
//outgoing stream redirect to socket
OutputStream out = s.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(out);
PrintWriter output = new PrintWriter(ow);
output.println(what);
output.close();
ow.close();
out.close();
} catch (Exception e) {
} finally {
if (s != null) {
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Questo funzionava x certo (quantomeno sul 2.2) e comunicava con una app java che usava i socket sul pc.
i miei permessi erano :
codice:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
A questo punto io farei mille piccole verifiche che probabilmente però hai già fatto :
Non è che per caso hai dati chiusi e wifi staccato sul telefono ?
L'indirizzo ip è corretto ? la porta è corretta ? risponde qualcosa ?
Peraltro, in debug ti si ferma sul Log.d(...) ? Se si, prova a fare un inspect di e e vedi almeno che tipo di eccezione è.
Continuo però a non capire come mai non ti scriva nulla sui log se va in errore.