Autore Topic: Problema connessione dati (da rete non domestica) WebService: RestFull  (Letto 1833 volte)

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Salve gente,

Il problema è il seguente:

Ho appurato che quando eseguo connessioni alla classe RestClient funziona solamente se utilizzio la mia rete domestica.
In pratica Android richiedere che l'URL da inviare per fare la richiesta dati è la seguente:

private String url = "http://MIO_IP_LETTO_DA_IPCONFIG/pagina_richiesta.php";

Ora, MIO_IP_LETTO_DA_IPCONFIG può equivalere ad esempio al genere: 192.168.0.105 (Casa mia) e il tutto come ho detto funziona corretamente.
Ovviamente se al posto di MIO_IP_LETTO_DA_IPCONFIG metto "localhost" oppure "127.0.0.1" non funziona a differenza di un browser che accetta anche questi.

Arrivo al problema: Dato che ce l'ho bisogno anche in università (Politecnico....) rieseguo la stessa procedura ma il tutto senza successo. e da LogCat ricevo quest'errore:

(Internet funziona correttamente con tutti i browser e in tutti i browser ho settato le impostazioni PROXY: proxy.polimi.it PORT: 8080
E pure lo script che servirebbe a bypassare la connessione in caso non si volesse usare il proxy: http://wpad.polimi.it/wpad.dat )

Codice: [Seleziona]
01-23 14:35:17.819: W/System.err(2450): java.net.SocketException: No route to host
01-23 14:35:17.944: W/System.err(2450):         at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
01-23 14:35:17.944: W/System.err(2450):         at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115)
01-23 14:35:17.944: W/System.err(2450):         at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244)
01-23 14:35:17.944: W/System.err(2450):         at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533)
01-23 14:35:17.944: W/System.err(2450):         at java.net.Socket.connect(Socket.java:1055)
01-23 14:35:17.944: W/System.err(2450):         at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
01-23 14:35:17.944: W/System.err(2450):         at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
01-23 14:35:17.944: W/System.err(2450):         at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-23 14:35:17.952: W/System.err(2450):         at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-23 14:35:17.952: W/System.err(2450):         at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
01-23 14:35:17.952: W/System.err(2450):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-23 14:35:17.952: W/System.err(2450):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-23 14:35:17.952: W/System.err(2450):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

Per darvi un idea a RestClient ci accedo così:

Codice (Java): [Seleziona]
// Creo il Client
RestClient client = new RestClient(url);
// Scelgo il metodo POST
client.Execute(RequestMethod.POST);

classe RestClient: (l'eccezzione parte al metodo:      protected String executeRequest(HttpUriRequest request, String url)     )

Codice (Java): [Seleziona]
public class RestClient {

        protected ArrayList<NameValuePair> params;
        protected ArrayList<NameValuePair> headers;
        protected String url;
        private int responseCode;
        private String message;
        private String response;

        public String getResponse() {
                return response;
        }

        public String getErrorMessage() {
                return message;
        }

        public int getResponseCode() {
                return responseCode;
        }

        public RestClient(String url) {
                this.url = url;
                params = new ArrayList<NameValuePair>();
                headers = new ArrayList<NameValuePair>();
        }

        public void AddParam(String name, String value) {
                params.add(new BasicNameValuePair(name, value));
        }

        public void AddHeader(String name, String value) {
                headers.add(new BasicNameValuePair(name, value));
        }

        public enum RequestMethod {
                GET, POST, PUT, DELETE;
        }



        // Controllo il RequestMethod
        public String Execute(RequestMethod method) throws Exception {
                switch (method) {
                //Se si usa GET configurare a dovere i file PHP
                case GET: {
                        // Aggiungo i Parametri settati
                        String combinedParams = "";
                        if (!params.isEmpty()) {
                                combinedParams += "?";
                                for (NameValuePair p : params) {
                                        String paramString = p.getName() + "="
                                                        + URLEncoder.encode(p.getValue(), "UTF-8");
                                        if (combinedParams.length() > 1) {
                                                combinedParams += "&" + paramString;
                                        } else {
                                                combinedParams += paramString;
                                        }
                                }
                        }
                        //Aggiungo all'URL i parametri
                        HttpGet request = new HttpGet(url + combinedParams);
                        // Aggiungo possibili Headers inizializzati
                        for (NameValuePair h : headers) {
                                request.addHeader(h.getName(), h.getValue());
                        }
                        response = executeRequest(request, url);
                }
                case POST: {
                        HttpPost request = new HttpPost(url);
                        // Aggiungo possibili Headers inizializzati
                        for (NameValuePair h : headers) {
                                request.addHeader(h.getName(), h.getValue());
                        }
                        if (!params.isEmpty()) {
                                request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                        }
                        response = executeRequest(request, url);
                }
                }
                return response;
        }


//L'eccezione parte qua dentro:

        protected String executeRequest(HttpUriRequest request, String url) {
                HttpClient client = new DefaultHttpClient();
                String response = null;
                try {

                        //ESATTAMENTE ALL'INVOCAZIONE DI client.execute

                        HttpResponse httpResponse = client.execute(request);
                        responseCode = httpResponse.getStatusLine().getStatusCode();
                        message = httpResponse.getStatusLine().getReasonPhrase();
                        HttpEntity entity = httpResponse.getEntity();
                        if (entity != null) {
                                InputStream instream = entity.getContent();
                                //Chiamo la conversione da Stream a String
                                response = convertStreamToString(instream);
                                //Chiusura dello Stream con rilascio connessione
                                instream.close();
                                return response;
                        }

                } catch (ClientProtocolException e) {
                        client.getConnectionManager().shutdown();
                        e.printStackTrace();
                } catch (IOException e) {
                        client.getConnectionManager().shutdown();
                        e.printStackTrace();
                }
                return response;

        }

        //Conversione in String
        private static String convertStreamToString(InputStream is) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                StringBuilder sb = new StringBuilder();
                String line = null;
                try {
                        while ((line = reader.readLine()) != null) {
                                sb.append(line);
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        try {
                                is.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
                return sb.toString();
        }
}

Qualcuno sa come darmi una mano? Grazie mille
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #1 il: 23 Gennaio 2012, 15:19:37 CET »
0
Ora, MIO_IP_LETTO_DA_IPCONFIG può equivalere ad esempio al genere: 192.168.0.105 (Casa mia) e il tutto come ho detto funziona corretamente.

Quello non è l'ip di casa tua ma l'ip del tuo pc nella tua lan domestica. Il tuo ip di casa lo puoi vedere andando su siti tipo www.whatismyip.com
Devi configurare il router per fare il nat delle connessioni in entrata verso quell'ip, consulta il manuale del router per sapere come procedere.... non è un problema di android ;)
« Ultima modifica: 23 Gennaio 2012, 15:22:41 CET da Ricky` »

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #2 il: 23 Gennaio 2012, 15:23:59 CET »
0
Ma a casa non ho problemi. Li ho quando sono al Politecnico con la loro rete.

Se uso l'IP del mio PC assegnato alla LAN domestica funziona.

Se uso l'IP del mio PC assegnato alla LAN del Politecnico non funziona.

P.S. Chiedo scusa per aver sbagliato sezione, pensavo fosse quella giusta  :-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #3 il: 23 Gennaio 2012, 15:27:37 CET »
0
Se uso l'IP del mio PC assegnato alla LAN domestica funziona.

Beh, è normale che funziona... sei all'interno della tua lan.
Come ti ripeto, devi utilizzare l'ip pubblico della tua connessione e configurare il tuo router per fare il nat delle porte.

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #4 il: 23 Gennaio 2012, 15:30:13 CET »
0
Ma infatti è dal primo post che dico che non ho problemi con casa, non li ho mai avuti. Io ho bisogno di risolvere il problema con la rete Wifi della mia università...Non posso configurare i router dell'università °_°
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #5 il: 23 Gennaio 2012, 15:31:56 CET »
0
Ma infatti è dal primo post che dico che non ho problemi con casa, non li ho mai avuti. Io ho bisogno di risolvere il problema con la rete Wifi della mia università...Non posso configurare i router dell'università °_°

Devi configurare il il router di casa. Scusa se non l'ho specificato, ma credevo fosse ovvio.

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #6 il: 23 Gennaio 2012, 15:36:27 CET »
0
Devi configurare il il router di casa. Scusa se non l'ho specificato, ma credevo fosse ovvio.

Si si ma era ovvio infatti non devi chiedere scusa. Ma dato che non ho problemi con la connessione da casa non devo riconfigurare nulla del router di casa.

Quello che volevo sapere è come faccio a fare la connessione tramite rete Wifi dell'Università.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #7 il: 23 Gennaio 2012, 15:40:39 CET »
0
Ma dato che non ho problemi con la connessione da casa non devo riconfigurare nulla del router di casa.

Non hai problemi perchè sei all'interno della tua rete domestica.
L'ip che ha il tuo pc nella tua rete domestica non è lo stesso ip che il tuo pc ha su internet.
Per fare quello che serve devi impostare il router affinchè le connessioni che riceve (tramite il tuo ip pubblico, quello che vedi facendo whatismyip.com) le reindirizzi su un certo ip della tua rete domestica.
Spero di essere stato chiaro, non saprei spiegartelo in parole più semplici.

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #8 il: 23 Gennaio 2012, 15:45:59 CET »
0
Sei stato fin troppo chiaro, ma mi stai rispondendo ad altro.

Piuttosto dimmi: no non puoi sistemare il problema con la rete Wifi della tua università (E' su questo che ho il problema e su questa rete mi aspettavo risposte)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #9 il: 23 Gennaio 2012, 16:05:44 CET »
0
La cosa è veramente strana cavolo.... La rete Wifi della mia università ha impostato come indirizzo IP macchina 10.169.162.50 mentre al mio terminale Android è stato assegnato l'IP: 10.169.161.71.

Provando a rispiegarmi meglio:
Sul mio pc se da browser inserisco il mio IP ovviamente parte Apache, ma lo stesso dovrebbe essere da terminale Android che se inserisco l'IP del PC dovrei comunque vederne il localhost. Purtroppo però non funziona e non capisco perchè...

Mi sa che l'unica soluzione è fare un server Online e caricarci le pagine PHP.

Qualcuno ha idee di come risolvere?
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #10 il: 23 Gennaio 2012, 16:21:33 CET »
0
Provando a rispiegarmi meglio:
Sul mio pc se da browser inserisco il mio IP ovviamente parte Apache, ma lo stesso dovrebbe essere da terminale Android che se inserisco l'IP del PC dovrei comunque vederne il localhost. Purtroppo però non funziona e non capisco perchè...

Riassumo quello che ho capito, conferma se è corretto:
1) C'è un PC1 in LAN all'università su cui hai messo Apache
2) Se da PC1 in LAN all'università, scrivi localhost, ti esce la pagina di Apache.
3) Se da un altro PC2 in LAN all'università, scrivi l'IP di PC1, ti esce la pagina di Apache.
4) Se da smartphone ANDROID in LAN all'università, scrivi l'IP di PC1, non ti esce la pagina Apache.

Molto importante è che confermi la 3), se la 3) non è confermata il problema è che manca qualche permesso per rispondere alle chiamate esterne.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #11 il: 23 Gennaio 2012, 16:33:08 CET »
0
Hai completamente ragione...non ci avevo pensato che ***** che sono...Infatti da PC2 risulta pagina web non disponibile. Molto probabilmente, anzi a sto punto ne sono sicuro al 250% la rete universitaria è stata impostata giustamente in questo modo per prevenire attacchi interni alla rete....Anche perchè altrimenti a me basterebbe conoscere l'IP di un altro per buttargli virus...

Riassumento:

Alla 3) e alla 4) non ci posso accedere (per motivi di sicurezza così penso)

Dici quindi che l'unica soluzione che rimane è fare il server Online con DB + pagine PHP?
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #12 il: 23 Gennaio 2012, 16:50:41 CET »
+1
Hai completamente ragione...non ci avevo pensato che ***** che sono...Infatti da PC2 risulta pagina web non disponibile. Molto probabilmente, anzi a sto punto ne sono sicuro al 250% la rete universitaria è stata impostata giustamente in questo modo per prevenire attacchi interni alla rete....Anche perchè altrimenti a me basterebbe conoscere l'IP di un altro per buttargli virus...

Riassumento:
Alla 3) e alla 4) non ci posso accedere (per motivi di sicurezza così penso)

Potrebbe essere anche una banale impostazione di Apache. Te lo dico perchè l'anno scorso ho avuto occasione di installare un EasyPHP ad un amico, che funziona tranquillamente come localhost, mentre ha bisogno di ulteriori settings se vuoi vederlo anche nella LAN attraverso IP. Pare assurdo, ma se vai a vedere come viene detto di risolvere questo problema sulle FAQ di EasyPhp, magari risolvi anche il tuo problema.   :-P
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #13 il: 23 Gennaio 2012, 16:57:36 CET »
0
Si, il programma che uso è WAMP per comodità di configurazione, che a sua volta utilizza Apache. Ho provato a cambiare qualche cosa nei file di configurazione leggendo qua e la per i siti/forum, ma per ora non ne sono venuto a capo :-(
Non ti ricordi in quale sezione parlavano di questo problema vero? In ogni caso comincio a darci un occhio.  Ovviamente se nel giro di 1 giorno non risolvo, come detto precedentemente passo al server online e Amen...
Ti ringrazio

P.S. se ti viene in mente o ti capita di trovare la soluzione... :-P son più che contento eheh  :-)

P.S.2 Sarà anche una banale configurazione, ma chissà come mai ci si mette sempre i giorni a capire, trovare e foooorse fixare il problema
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema connessione dati (da rete non domestica) WebService: RestFull
« Risposta #14 il: 23 Gennaio 2012, 17:12:30 CET »
0
Da una rapida occhiata potrebbe essere questo: dovresti andare nel file httpd.conf e mettere una cosa del genere (al posto di 192.168.1.xxx metti l'indirizzo LAN del PC1 così risponde anche se viene chiamato per IP e non per localhost).

Listen 192.168.1.xxx:80
Listen 127.0.0.1:80
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store