Autore Topic: Problema utilizzo Android come server TCP  (Letto 1573 volte)

Offline cloto3000

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samnsung mini
  • Sistema operativo:
    win 7
Problema utilizzo Android come server TCP
« il: 06 Luglio 2011, 15:26:09 CEST »
0
Salve a tutti,
ho provato a realizzare un piccolo server di CHAT che gira su android ed a connettermi con un client che gira sul mio PC. I due dispositivi stanno sulla stessa rete locale avendo collegato il cellulare al WIFI.
Il PC ha l'indirizzo IP: 192.168.1.101 mentre Android ha il 103 finale. Ho tolto la scheda SIM in modo da non incasinarmi ulteriormente.
Il codice del server (quelllo che gira su Android) è:
Codice (Java): [Seleziona]
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;


import android.os.Environment;


public class PTTRESActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText("via");
        setContentView(tv);
             
        Server server = new Server();
        server.setActivity(this);
        Thread t1 = new Thread (server);
        t1.start();
        /**setContentView(R.lay;out.main);**/
    }
   

    public class Server implements Runnable {
 
       
        private File sd = Environment.getExternalStorageDirectory();
            private File f = new File(sd, "nome_file.txt");
            private int i=0;
            private Activity activity = null;
            private ServerSocket server;
                private Socket connessione;
                private BufferedReader dalClient;
                private PrintStream alClient;
                private String name;

           
            public void setActivity(Activity activity) {
                this.activity = activity;
            }
           
            @Override
            public void run() {
                    byte[] buf = new byte[17];
                    String st = null;
                                       
                try {
                        InetAddress serverAddr = InetAddress.getByName("192.168.1.103");
                        st = serverAddr.toString();
                        server = new ServerSocket(9999,5,serverAddr);
                        write(server.getInetAddress().toString());
                                //System.out.println("Server attivo");
                                connessione = server.accept();
                                dalClient = new BufferedReader(new InputStreamReader(connessione.getInputStream()));
                                alClient = new PrintStream(connessione.getOutputStream());
                                String messaggio = "";
                                BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
                                alClient.println("Simple Hack Chat - Sei connesso al server! Digita /logout");
                while ((!messaggio.equals("/logout")) ) {
                try {
                        messaggio = dalClient.readLine();
                                write(messaggio);
                                if(!messaggio.equals("/logout")) {
                                        messaggio = t.readLine();
                                        alClient.println(name+" scrive: "+messaggio);
                                }

                  } catch (IOException e) {
                    i++;    
                    write("IO!" + i);  
                  }
                }
                } catch (Exception e) {
                         write(e.toString() + "-" + st);};
              }
             
           
             

            public void write (String Data){
            try{
                TextView tv = new TextView(this.activity);
                tv.setText(tv.getText()+ " - "+Data);
                setContentView(tv);
                                   }
                catch (Exception e) {      
                e.printStackTrace();
                }
            }
    }
}
   

Il codice del cliente invece è:

Codice (Java): [Seleziona]
import java.net.*;
import java.io.*;



public class ClientTCP {
        private Socket connessione;
        private BufferedReader dalServer;
        private PrintStream alServer;
        private String name;
       
        public static void main(String[] args) {
                ClientTCP c = new ClientTCP("raffy");
                c.conversazione();

        }
        public ClientTCP(String name) {
                this.name = name;
                BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
                try {
                         
                        System.out.println("Inserire indirizzo server: ");
                        //String indirizzo = t.readLine();
                        connessione = new Socket("192.168.1.103", 9999);
                        dalServer = new BufferedReader(new InputStreamReader(connessione.getInputStream()));
                        alServer = new PrintStream(connessione.getOutputStream());
                }
                catch(IOException e) {
                        System.out.println(e);
                }
        } // Client()
 
        public void conversazione() {
                String messaggio = "";
                BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
                try {
                        while(!messaggio.equals("/logout")) {
                                messaggio = dalServer.readLine();
                                System.out.println(messaggio);
                                if(!messaggio.equals("/logout")) {
                                        messaggio = t.readLine();
                                        alServer.println(name+" scrive: "+messaggio);
                                }
                        } // while
                        connessione.close();
                }
                catch(IOException e) {
                        System.out.println("Conversazione interrotta");
                }
        } // conversazione()
}

Premetto che il codice l'ho preso da altri esempi e riaddato.

Il problema è che il server quando lo avvio mi da l'errore Java.net.BindException. Cannot Assign requested address - 192.168.1.103
(naturalmente sono sicuro che l'indirizzo è quello giusto).
Ho già messo lo user-permission INTERNET nel manifest.
Sembra quasi che per qualche motivo non sia possibile creare un socket server su quella scheda di rete. Infatti se metto null al posto di serverAddr nella chiamata
server = new ServerSocket(9999,5,serverAddr);
che è quella che da l'errore, il server si avvia e rimane in ascolto. Peccato che se dal client tento la connessione mi dice:
Connection refused..
Non c'è nessun firewall attivo sulla rete locale. A meno che non ne esista qualcuno sulla scheda WIFI del telefonino.

QUALCUNO PUO' AIUTARMI ?
grazie mille !
 ;-)

« Ultima modifica: 06 Luglio 2011, 15:28:35 CEST da cloto3000 »

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
« Ultima modifica: 06 Luglio 2011, 15:40:00 CEST da teskio »

Offline cloto3000

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samnsung mini
  • Sistema operativo:
    win 7
Re:Problema utilizzo Android come server TCP
« Risposta #2 il: 06 Luglio 2011, 15:43:56 CEST »
0
Non ho il logcat ma l'errore me lo da su:
server = new ServerSocket(9999,5,serverAddr);
 
e l'eccezione è una IOException (come si vede anche dal codice).

Come già scritto dopo Bindexception: cannot assign requested address / 192.168.1.103

Grazie

Offline cloto3000

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samnsung mini
  • Sistema operativo:
    win 7
Re:Problema utilizzo Android come server TCP
« Risposta #3 il: 07 Luglio 2011, 10:05:16 CEST »
0
Non ci credo che nessuno abbia manco un suggerimento ! Forza androddiani !

 ;-)

Offline cloto3000

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samnsung mini
  • Sistema operativo:
    win 7
Re:Problema utilizzo Android come server TCP
« Risposta #4 il: 07 Luglio 2011, 10:28:13 CEST »
0
 >:(

Minchia che coglione !!!!! Mia figlia ha collegato la TV al router e lo stronzone mi ha cambiato l'indirizzo IP in 104 !!!!!!
SCUSATE: be comunque potete tenervi il codice perchè funziona alla grande !!!
Ciaoo

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema utilizzo Android come server TCP
« Risposta #5 il: 07 Luglio 2011, 13:22:37 CEST »
0
Minchia che coglione !!!!! Mia figlia ha collegato la TV al router e lo stronzone mi ha cambiato l'indirizzo IP in 104 !!!!!!

Ma LOL! :D