Autore Topic: Programmazione client/server  (Letto 3353 volte)

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Programmazione client/server
« il: 17 Dicembre 2012, 16:45:56 CET »
0
Salve a tutti ragazzi, sto realizzando un piccolo programma client server, dove il client è un'applicazione android, il server è in java.
Utilizzo Eclipse e come emulatore il mio galaxy s3, il problema è che non riesco a mettere in comunicazione il client con il server .
Documentandomi un pò in rete ho visto che per accedere al server sulla macchina in locale dal mio dispositivo non dovevo utilizzare 127.0.0.1 ma 10.0.2.2, ma ancora non ci riesco.
Chi sa come risolvere questo problema?
Ringrazio tutti anticipatamente.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Programmazione client/server
« Risposta #1 il: 17 Dicembre 2012, 16:50:50 CET »
0
10.0.2.2 và bene se usi l'emulatore, non se usi un dispositivo fisico  :-)

Il server è sul tuo pc, giusto? Quindi dovresti puntare all'indirizzo IP del PC, se il cellulare è collegato alla stessa rete  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #2 il: 17 Dicembre 2012, 17:01:26 CET »
0
Innanzitutto volevo ringraziarti per l'aiuto, in ogni caso ci ho provato ma ancora non si collega.
Codice (Java): [Seleziona]
import java.awt.font.TextAttribute;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class Chat extends Activity {

        private Button connect;
        private Button invia;
        private EditText address;
        private EditText port;
        private TextView textArea;
        private  EditText textMessage;
        private Socket socket=null;
        private Thread thread;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                connect=(Button)findViewById(R.id.connetti);
                invia=(Button)findViewById(R.id.invia);
                address=(EditText)findViewById(R.id.host);
                address.setImeOptions(EditorInfo.IME_ACTION_DONE);
                port=(EditText)findViewById(R.id.port);
                port.setImeOptions(EditorInfo.IME_ACTION_DONE);
                textArea=(TextView)findViewById(R.id.output);
                textMessage=(EditText)findViewById(R.id.messaggio);
                textMessage.setImeOptions(EditorInfo.IME_ACTION_DONE);
               
                 View.OnClickListener gestore = new View.OnClickListener() {
                  public void onClick(View view) {
                   
                    switch(view.getId()){
                               
                      case R.id.connetti:
                          if(connect.getText().toString().compareTo("Connetti")==0)
                                  stateConnect();      
                          else
                                  stateDisconnect();
                        break; 
                      case R.id.invia:
                          String str=textMessage.getText().toString();
                          if(!str.equals(""))
                                                send(str);
                          textMessage.setText("");//reinizializza l'edit text
                                       
                    }  
                  }
                };             
                //associazione del bottone al listener
                connect.setOnClickListener(gestore);
               
                //listener sulla editText, non appena si inserisce il testo  si clicca su Fatto
                        //sparisce la tastiera e si abiliotail tasto OK
                        /*textMessage.setOnEditorActionListener(new OnEditorActionListener() {
                                @Override
                                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                                if (actionId == EditorInfo.IME_ACTION_DONE && textMessage.getText().toString().compareTo("")!=0) {
                                       
                                        String str=textMessage.getText().toString();
                                        if(!str.equals(""))
                                                send(str);
                                        textMessage.setText("");//reinizializza l'edit text
                                       
                                        return true;
                                }
                                return false;
                            }
                        });*/

               
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
       
        protected void stateConnect() {
            try {
              //socket = new Socket(InetAddress.getByName(address.getText().toString()), Integer.parseInt(port.getText().toString()));
            new EseguiConnessione();
                //socket = new Socket("10.0.0.2" ,10000);
              thread = new Thread();
              thread.start();
            } catch(Exception ex) {
                textArea.setText(ex.toString());
            }
            textArea.setEnabled(true);
            textMessage.setEnabled(true);
            address.setEnabled(false);
            connect.setText("Disconnetti");
          }
       
        protected void stateDisconnect() {
            try {
              if(socket!=null && socket.isConnected()) socket.close();
            }catch(Exception ex) {
                textArea.setText(ex.toString());
            }
            if(thread!=null) thread.interrupt();
            textArea.setEnabled(false);
            textMessage.setEnabled(false);
            address.setEnabled(true);
            connect.setText("Connetti");
          }
       
        public void run() {
            try {
              while(true) {
                String msg = receive();
                textArea.append(msg);
              }
            } catch(Exception ex) {
              stateDisconnect();
            }
          }
       
        protected void send(String msg) {
            try {
              msg+="\r\n";
              textArea.append(msg);
              OutputStream outStream = socket.getOutputStream();
              outStream.write(msg.getBytes());
              outStream.flush();
            }
            catch(IOException ex) {
              ex.printStackTrace();
            }
          }
       
        public String receive() throws IOException {
            String line = "";
            InputStream inStream = socket.getInputStream();
            int read = inStream.read();
            while (read!=10 && read > -1) {
              line+=String.valueOf((char)read);
              read = inStream.read();
            }
            if (read==-1) return null;
            line+=String.valueOf((char)read);
            return line;
          }
       
        private class EseguiConnessione extends AsyncTask<Socket, Void, String> {
                @Override
                protected String doInBackground(Socket... params) {
                        // TODO Auto-generated method stub
                        try {
                                socket=new Socket("192.168.30.67", 10000);
                        } catch (Exception e) {
                                // TODO Auto-generated catch block
                                textArea.setText(e.toString());
                        }
                 return "OK";
                }

               
        }

}
Questo è il codice.
Cosa sbaglio?

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Programmazione client/server
« Risposta #3 il: 17 Dicembre 2012, 18:09:13 CET »
+1
Da un errore oppure non si collega e basta?

magari dai un occhiata a questo esempio Server Client Communication fo Android
« Ultima modifica: 17 Dicembre 2012, 18:13:45 CET da theBaffo »
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #4 il: 17 Dicembre 2012, 18:14:51 CET »
0
Non si collega e basta

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #5 il: 18 Dicembre 2012, 09:15:54 CET »
0
In realtà lancio prima il server scritto in java, avvio l'app client con il dispositivo collegato via usb al pc, ma niente, quando clicco su connetti (il bottone) cambia stato cioè il testo sul bottone diventa "Disconetti", però sembra che al server (scritto in java e che gira in locale sul pc) non si connette.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Programmazione client/server
« Risposta #6 il: 18 Dicembre 2012, 10:00:24 CET »
0
Non basta il collegamento usb, devi fare in modo che il tuo computer agisca da Server tramite la rete, il cavo usb lo puoi anche staccare dopo aver installato l'applicazione  :-)

Se guardi il link che ti ho postato prima, c'è scritto come rendere il proprio pc un server  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #7 il: 18 Dicembre 2012, 10:39:30 CET »
0
Ti ringrazio provvedo a darmi una lettura chissa capsico meglio

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #8 il: 18 Dicembre 2012, 10:49:03 CET »
0
Ho provato a fare ciò che si diceva nel tutorial, in pratica ho sostituito nel client postato in precedenza alla seguente istruzione

Codice (Java): [Seleziona]
socket=new Socket("192.168.30.67", 10000);
quest'ultima
Codice (Java): [Seleziona]
socket=new Socket(InetAddress.getByName("http://<server-path>/MrChatServer.java"), 10000);
Ma ancora non riesco a connettermi. Saresti così gentile da postarmi un esempio più significativo o dirmi dove sbaglio nel codice?
Grazie ancora.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Programmazione client/server
« Risposta #9 il: 18 Dicembre 2012, 12:05:59 CET »
0
Non sò aiutarti più di tanto per quanto riguarda le applicazioni client - server, però fossi te andrei in debug, passo passo, e vedere che tipo di eccezione dà  :-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #10 il: 18 Dicembre 2012, 12:10:01 CET »
0
Il problema e proprio che non mi da nessuna eccezione

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Programmazione client/server
« Risposta #11 il: 18 Dicembre 2012, 14:35:49 CET »
0
Magari qualcuno riesce ad aiutarti, cerca di spiegare il problema più precisamente, così magari arriviamo ad una soluzione anche con gli altri utenti del forum!  :-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #12 il: 18 Dicembre 2012, 15:12:07 CET »
0
Si scusatemi se sono stato poco chiaro.
In pratica come già ho detto ho una applicazione lato server scritta in java ed una lato client in android (il codice è quello che ho postato in precedenza).
Voglio testare la mia app ma per farlo ho bisogno che sia l'emulatore o sia il dispositivo reale(galaxy s3), connesso via usb siano in grado di connettersi al localhost della macchina sulla porta 10000.
Cercando le soluzioni online ho visto che per accedere dall'emulatore al localhost della macchina quando creo la socket non devo inserire 127.0.0.1 bensì 10.0.2.2, inoltre per quanto riguarda le porte per far corrispondere quella del mio pc a quella dell'emulatore  (entrambe 10000) lancio dal cmd le seguenti istruzioni prima di avviare il server e il client
telnet localhost 5554
redir add tcp:10000:10000

Ma non succede nulla, non appare alcun messaggio di errore semplicemente il server resta in ascolto e se clicco su connetti dal client non si connette a nulla.
Spero di essermi fatto capire.
Meglio non saprei spiegarmi.
Grazie ancora. 

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Programmazione client/server
« Risposta #13 il: 18 Dicembre 2012, 15:16:57 CET »
0
Inoltre stavo notando un'altra cosa dopo aver modificato l'istruzione
Codice (Java): [Seleziona]
socket=new Socket("192.168.30.67", 10000);con
Codice (Java): [Seleziona]
socket=new Socket("10.0.2.2", 10000);in fase di debug  dopo che esegue l'istruzione all'oggetto socket viene assegnato null cioè non viene creata alcuna socket.
Ovviamente ciò lo faceva anche prima di fare questa modifica.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Programmazione client/server
« Risposta #14 il: 18 Dicembre 2012, 16:15:05 CET »
0
Diventa null perchè non è l'indirizzo giusto, mentre evidentemente 192.168.30.67 è giusto, ma per qualche motivo non funziona...

comunque, ho trovato un esempio che funziona sicuramente su emulatore, prova a cambiare l'indirizzo e guarda se funziona

Simple client-server application
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch