Autore Topic: Socket  (Letto 795 volte)

Offline supergiox

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Linux Ubuntu
Socket
« il: 02 Aprile 2011, 12:09:42 CEST »
0
Ciao a tutti!
Non so se questa è la sezione adatta, in caso sposto la discussione...
Ho fatto un paio di applicazioni che mi permettono di far comunicare pc e android utilizzando due classi java che ho scritto io e che implementano i Socket.

Fino ad oggi pomeriggio funzionavano perfettamente... poi, per motivi di forza maggiore ho cambiato rom al mio Optimus One (da Nessy a LOL, entrambe con kernel 2.2.2) e funziona tutto, tranne i miei programmi :(
Non capisco a cosa possa essere dovuto... forse manca qualche libreria? Poi ho notato che tramite l'app "telnet" riesco a comunicare con il pc.. quindi evidentemente esiste un'alternativa... ma qual è?

Non so se può essere utile, ma questi sono i sorgenti della classe Server (pc) e Client (smartphone)

Client:
Codice: [Seleziona]
import java.net.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client{
    Socket socket;
    BufferedWriter out;
    BufferedReader in;
     
    Client(String address, int port) throws UnknownHostException, IOException{
        socket = new Socket(address, port);
        System.out.println("Connesso a "+address+" alla porta "+port);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        out.flush();
    }
   
        String receive() throws IOException{
            return in.readLine();
    }
   
    void send(String msg) throws IOException
    {
        out.write(msg);
        out.flush();
    }
   
    void close() throws IOException{
        in.close();
        out.close();
        socket.close();
    }
}

Server:
Codice: [Seleziona]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server{
    ServerSocket socket;
    Socket connection = null;
    BufferedWriter out;
    BufferedReader in;
    String message;
   
    Server(int port) throws IOException{
        socket = new ServerSocket(port);
        System.out.println("In listening...");
        connection = socket.accept();
        System.out.println("Connessione avvenuta con " + connection.getInetAddress().getHostName());
        in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
        out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
        out.flush();
    }
   
   
    String receive() throws IOException{
        return in.readLine();
    }
   
    void send(String msg) throws IOException {
        out.write(msg);
        out.flush();
    }
   
   
    void close() throws IOException{
        in.close();
        out.close();
        socket.close();
    }
   
   
    public static void main(String args[]) throws Exception
    {
       
        String ric="";
        Server server = new Server(8888);
        System.out.println("\nCONNESSO!");
        server.send("Siamo collegati!\n");
        do{
            ric=server.receive();
            System.out.println("Ho ricevuto:"+ric);
            server.send("Ciao client");
        }
        while(ric!=null && !ric.equals("") && !ric.equals("chiudi"));
        System.err.println("Chiudo la connessione");
        server.close();
    }
       
}

Un'altra cosa strana è che queste classi non hanno mai funzionato sull'emulatore (anche se la connessione funziona), e dovevo provarle direttamente nel telefono... sapete dirmi perchè?

Ciao e grazie per l'attenzione :)

P.S.
Se necessario più tardi posto il logcat, al momento sono su un altro pc.
La mia app:

Offline supergiox

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Linux Ubuntu
Re:Socket
« Risposta #1 il: 02 Aprile 2011, 17:00:06 CEST »
0
Cerco di essere più chiaro. La mia app va in crash quando prova ad inviare una stringa al server.. e il problema è proprio che non riesce più ad effettuare la connessione.
Come potete vedere dalla classe client, la connessione viene fatta nel costruttore. quindi con: Client c = new (host,port);

questo è il logcat:

Codice: [Seleziona]
W/dalvikvm( 9425): threadid=1: thread exiting with uncaught exception (group=0x40020ac0)
E/wifi    ( 1517): [android_net_wifi_getRssiHelper] rssi -22
E/AndroidRuntime( 9425): FATAL EXCEPTION: main
E/AndroidRuntime( 9425): java.lang.NullPointerException
E/AndroidRuntime( 9425):         at it.giox.arduinoacc.ArduinoAcc.onSensorChanged(ArduinoAcc.java:53)
E/AndroidRuntime( 9425):         at android.hardware.SensorManager$ListenerDelegate$1.handleMessage(SensorManager.java:449)
E/AndroidRuntime( 9425):         at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 9425):         at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 9425):         at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 9425):         at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 9425):         at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 9425):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 9425):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 9425):         at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 1517):   Force finishing activity it.giox.arduinoacc/.ArduinoAcc
W/ActivityManager( 1517): Activity pause timeout for HistoryRecord{4695cd50 it.giox.arduinoacc/.ArduinoAcc}
I/ActivityManager( 1517): Displayed activity it.giox.arduinoacc/.ArduinoAcc: 16967 ms (total 16967 ms)
La mia app: