CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: Steamblade con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: carotix con ben 5 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 19 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 1 su 1
Discussione:

Andorid: Connessione Socket usando AsyncTask , ma qualcosa non va

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
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    21

    Ringraziamenti
    5
    Ringraziato 0 volte in 0 Posts
    Question

    Andorid: Connessione Socket usando AsyncTask , ma qualcosa non va

    Ciao ragazzi

    Allora sarò molto breve: sto cercando di creare una connessione socket con un server (Il server è un'applicazione che gira sul PC e I client sono delle App per android). Ho creato questo tipo di codice per il mio client:

    CLIENT

     
    1
    2
    public class Messaggi extends ActionBarActivity implements OnClickListener {
    3
    4
    LinearLayout mLayout;
    5
    ScrollView scroll;
    6
    EditText writeMessage;
    7
    Button send; 
    8
    Socket connection;  
    9
    10
    @Override
    11
    protected void onCreate(Bundle savedInstanceState) {
    12
        super.onCreate(savedInstanceState);
    13
        setContentView(R.layout.fragment_messaggi);
    14
        mLayout = (LinearLayout) findViewById(R.id.linearVertical);
    15
        scroll = (ScrollView) findViewById(R.id.scrollView1);
    16
        writeMessage= (EditText)findViewById(R.id.ScriviMessaggio);
    17
        send= (Button)findViewById(R.id.invia);
    18
        send.setOnClickListener(this);
    19
        LavoraDietro asd = new LavoraDietro();
    20
        asd.execute();   
    21
    }
    22
    @Override
    23
    public void onClick(View v) {
    24
    }
    25
    26
    private void updateScroll(){ 
    27
        scroll.post(new Runnable() {
    28
               @Override
    29
               public void run() { 
    30
                 scroll.fullScroll(View.FOCUS_DOWN);
    31
               }
    32
            });
    33
    }
    34
    35
    private TextView createNewTextView(String text) {
    36
        final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    37
        final TextView textView = new TextView(this);
    38
        textView.setLayoutParams(lparams);
    39
        textView.setText("Client: " + text);
    40
        return textView;
    41
    }
    42
    43
    private class LavoraDietro extends AsyncTask<Void, Void, Boolean> {
    44
        String mex;
    45
        @Override  
    46
        protected Boolean doInBackground(Void... params){ 
    47
            try {
    48
                InetAddress local = InetAddress.getByName("192.168.1.79");
    49
                Socket connection= new Socket(local , 7100);
    50
                  DataOutputStream output = new DataOutputStream(connessione.getOutputStream());
    51
                    output.writeUTF("Client: Server prova");
    52
                    output.flush();
    53
                DataInputStream input = new DataInputStream(connessione.getInputStream());
    54
                mex= input.readUTF();
    55
            } catch (UnknownHostException e) {
    56
                 // TODO Auto-generated catch block 
    57
                e.printStackTrace();
    58
            } catch (IOException e) {  
    59
                // TODO Auto-generated catch block  
    60
                e.printStackTrace(); 
    61
                return false;
    62
            }catch(Exception e){
    63
                e.printStackTrace();
    64
                } 
    65
            return true;
    66
        } 
    67
    68
        @Override 
    69
        protected void onPostExecute(Boolean result) {
    70
            super.onPostExecute(result);
    71
            if(result == true){
    72
                mLayout.addView(createNewTextView("Sono connesso al server"));  
    73
            mLayout.addView(createNewTextView("I canali sono aperi.."));
    74
            mLayout.addView(createNewTextView(mex));
    75
            updateScroll();
    76
            }
    77
            else{
    78
            mLayout.addView(createNewTextView("ERRORE CONNESSIONE AL SERVER "));
    79
            updateScroll();
    80
            }
    81
            }
    82
    } 
    83
    }
    84


    In questo modo quando l applicazione viene aperta si connette al server automaticamente e invia un messaggio di prova. Questo viene letto dal server e subito dopo riinviato al client. Quando il client riceve il messaggio lo mostra nel TextField.

    Il mio problema è il seguente: Voglio fare in modo che quando l applicazione viene aperta automaticamente il client si connette al server ed è pronto ad ascoltare tutto ciò che il server invia (proprio come succede nel codice qui sopra), ma solo quando clicco sul tasto "send" un messaggio (tipo "ciao belli") deve essere inviato al server. In poche parole vorrei dividere l'azione di connettermi al server e ascoltare i suoi messaggi da quella di inviare i messaggi al server..
    La mia idea era quella di creare un AsyncTask[1] che apriva la socket e i canali di input, e poi aprire un altro AsyncTask[2] che creava un output quando il tasto era cliccato e invia un messaggio. Ma non so proprio da dove iniziare perchè dovrei fare in modo che la connessione che viene stabilita nel primo Asynctask (Asynctask[1]) rimanga attiva

    Qualcuno può darmi un idea di come fare. Se non sono stato chiaro scrivete pure cercherò di essere più esaustivo possibile.
    Grazie mille ragazzi

  2.  

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