PDA

View Full Version : ANDROID--Problema ServerSocket


chri13
18-08-2014, 15:53
Salve a tutti..
Sto sviluppando un app Android per la tesi di laurea. Premetto che sono alle prime armi con la programmazione Android.
Ho un problema riguardante la ServerSocket.
In pratica ho sviluppato una semplicissima app Android che funge sia da client(invia una semplice stringa a un server java) che da server(riceve una semplice stringa da client java).
Il thread che funge da client funziona benissimo, invia correttamente la stringa a un server java utilizzando la classe Socket.
Invece il thread che funge da server rimane in attesa su ServerSocket.accept() ma non riceve la connessione dal client, quindi rimane fermo là.
Vi posto il codice della classe WorkerThreadServer:
public class WorkerThreadServer extends Thread{
final String TAG = "WorkerThreadServer class";
public void start(){

Log.i(TAG,"start() method");
super.start();
}

public void run(){
try{
socketServer = new ServerSocket(10324);
Log.i(TAG,"in attesa di connessione....");
Socket socket = socketServer.accept();
Log.i(TAG,"connessione ricevuta....!");
Log.i(TAG,"dati del client..."+socket.getLocalPort());


}catch(Exception e){
Log.i(TAG,"eccezione="+e.toString());
}
}

}


La classe WorkerThreadServer viene istanziata e avviata al click di un bottone attraverso le due seguenti istruzioni:
WorkerThreadServer serverThread = new WorkerThreadServer();
serverThread.start();


Il problema(come ho già accennato) è che il thread rimane bloccato su "socketServer.accept();" infatti viene stampato il Log "Log.i(TAG,"in attesa di connessione....");" e non riesce ad andare avanti, cioè non riceve la connessione, infatti non viene stampato il Log "Log.i(TAG,"connessione ricevuta....!");".
Il client è una semplicissima applicazione java con il seguente codice:


public class Client{
public static void main(String args[]){
System.out.println("Avvio client in corso....");
//codice client----------------------
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
socket = new Socket("192.168.56.1",10324);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.writeUTF("Questa e’ una prova"); }
catch(UnknownHostException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} finally{
if (socket != null){
try {
socket.close();
} catch(IOException e) { e.printStackTrace();
} } if (dataOutputStream != null){
try {
dataOutputStream.close();
} catch (IOException e) {
} }
if (dataInputStream != null){
try {
dataInputStream.close();
} catch (IOException e) {
e.printStackTrace();
} } }
}}



Come già accennato prima il thread dell'app che si occupa della parte client ha lo stesso codice di questo client java e funziona benissimo aprendo una connessione e inviando la stringa a un server java (che utilizza sempre ServerSocket.accept() ).


Vi chiedo gentilmente se potete aiutarmi, ve ne sarei veramente molto grado...