CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: bluemask con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: megthebest con ben 5 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 31 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 2 su 2
Discussione:

Problema connessione Client Android-Server java

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Jul 2014
    Messaggi
    59

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Problema connessione Client Android-Server java

    Ciao ragazzi, ho un problema....quello che devo fare è un semplicissimo client [Android] che comunica con un semplicissimo Server [java]....una sorta di chat utilizzando le socket..
    Il client Android appena si avvia deve connettersi con il server e dopo, ogni volta che viene premuto un bottone, inviare una stringa al server...
    Per quanto riguarda il client Android ecco il codice:

     
    1
    2
    public class MainActivity extends Activity {
    3
    DataOutputStream dataOutputStream;
    4
    Button inviaStringa;
    5
             @<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
    6
        protected void onCreate(Bundle savedInstanceState) {
    7
            super.onCreate(savedInstanceState);
    8
            setContentView(R.layout.activity_main);
    9
            dataOutputStream = null;
    10
            new Connection().start();    //avvio il thread secondario che connette la socket e gli stream di lettura/scrittura
    11
            inviaStringa = (Button)findViewById(R.id.button);
    12
          
    13
            inviaStringa.setOnClickListener(new OnClickListener() {
    14
                         public void onClick(View v) {
    15
                       if(dataOutputStream!=null){
    16
                                          try{
    17
                                           dataOutputStream.writeUTF("stringa da inviare");
    18
                           }catch(Exception e){
    19
                                    // TODO Auto-generated catch block
    20
                    e.printStackTrace();
    21
    }
    22
    }
    23
                }
    24
        });
    25
    26
    27
    28
    29
        }
    30
        
    31
        
    32
        
    33
        public class Connection extends Thread{
    34
            Socket socket;
    35
            DataInputStream dataInputStream;
    36
            public Connection(){
    37
                socket = null;
    38
                dataOutputStream = null;
    39
            }
    40
            
    41
            public void run(){
    42
                try {
    43
                    socket = new Socket("192.168.1.8",8080);
    44
                    dataOutputStream = new DataOutputStream(socket.getOutputStream());
    45
                                    dataInputStream = new DataInputStream(socket.getInputStream());
    46
                    
    47
                } catch (UnknownHostException e) {
    48
                    // TODO Auto-generated catch block
    49
                    e.printStackTrace();
    50
                } catch (IOException e) {
    51
                    // TODO Auto-generated catch block
    52
                    e.printStackTrace();
    53
                }
    54
    55
    while(true){
    56
    try{
    57
    String input = dataInputStream.readLine();
    58
    //stampa la stringa input su qualche TextView...
    59
    }catch(IOException){
    60
    // TODO Auto-generated catch block
    61
                    e.printStackTrace();
    62
    }
    63
    }
    64
    65
    66
            }
    67
            
    68
            
    69
        }
    70



    mentre il codice del server java è il seguente:

    25
     
    1
    public class Server {
    2
    public static void main(String args[]){
    3
        
    4
        ServerSocket serverSocket;
    5
        Socket socket;
    6
        DataInputStream dataInputStream;
    7
        
    8
        
    9
        try {
    10
            serverSocket = new ServerSocket(8080);
    11
            System.out.println("in attesa di connessione");
    12
            socket = serverSocket.accept();
    13
            System.out.println("connessione ricevuta");
    14
            dataInputStream = new DataInputStream(socket.getInputStream());
    15
         While(true){
    16
            System.out.println(dataInputStream.readLine().toString());
    17
                        }
    18
        } catch (IOException e) {
    19
            // TODO Auto-generated catch block
    20
            e.printStackTrace();
    21
        }
    22
        
    23
        
    24
    }
    25
    }


    Il problema è che il server riceve regolarmente la connessione, però non riceve alcuna stringa dal client android....Infatti se sul client premo molte volte il bottone, il server non riceve la stringa....
    in pratica il server java rimane fermo su "System.out.println(dataInputStream.readLine().toS tring());"

    La cosa più strana è che entrambi funzionano correttamente separati, cioè se faccio connettere un client telnet al server java, quest'ultimo riceve regolarmente le stringe inviategli, mentre se collego il client android a un server telent, quest'ultimo ugualmente riceve le stringhe in modo corretto ogni volta che premo il bottone del client....
    In pratica non vengono inviate o ricevute le stringhe solo quando vengono connessi tra di loro....

    Sapete il motivo?
    o eventualmente avete il codice di un client che funziona correttamente?



    L'importante è che il client istanzia "solo" all'inizio il thread secondario e la socket, dopo ad ogni pressione del bottone viene solo inviata la stringa.

    vi ringrazio molto....
    Ultima modifica di chri13; 22-09-14 alle 15:56

  2.  
  3. #2
    Androidiano


    Registrato dal
    Jul 2014
    Messaggi
    59

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    La cosa importante è che la socket venga istanziata solo una volta(al momento che viene avviata l'applicazione) e dopo, ogni volta che viene premuto un tasto, viene solo inviata la stringa....
    Come già scritto in precedenza, i due programmi separati funzionano correttamente(il client android funziona bene collegandosi a un server telnet, idem il server java...).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy