Autore Topic: Server web con NanoHttpd su smartphon Samsung connesso in rete.  (Letto 567 volte)

Offline alexdi

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
0
Un saluto a tutta la comunity
Dunque, "scopiazzando" qua e la, sto provando la libreria in oggetto https://github.com/NanoHttpd/nanohttpd[/url] con una piccola app in debug con Android Studio. Questa app non fa altro che attivare il server sulla porta 5000.

Con smartphon collegato in wifi sul router della mia adsl nessun problema: inserisco nella barra degli indirizzi del browser http:\\IP Locale router:5000 e lo smartphone mi risponde!

Stessa cosa se invio la richiesta da un server web in locale che ho sul pc (XAMPP) , lo smartphone risponde!

Il problema nasce quando disconnetto dal wifi il telefono che ovviamente va in connessione dati.

inserisco nella barra degli indirizzi del browser http:\\IP Pubblico:5000 e non c'è verso. Non riesco ad ottenere alcuna risposta.

Siceramente, ho cercato ma non ho trovato nulla in giro che mi aiutasse.

Riuscite a capire dove mi sto perdendo ?
Che fatica !! :-)
Manifest:
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[url]http://schemas.android.com/apk/res/android"
    package="com.dillofaile.faciledroid2">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <service
        android:name="CallListService"

        android:label="@string/CallListService"
        >
    </service>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"


        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


MainActivity:
Codice: [Seleziona]
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.IOException;


public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText editTextUsername;
    private EditText editTextPassword;
    private EditText etUserName, etPassword;
    private Button buttonRegister;
    private Context context;
    //public Server Serv;
    //private static final String REGISTER_URL = "http://95.252.154.153/joomla3/?option=com_droidx&task=ciao&tmpl=component";
    //private static final String REGISTER_URL = "http://www.dillofacile.org/home.html";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etUserName = (EditText) findViewById(R.id.editTextUserName);
        etPassword = (EditText) findViewById(R.id.editTextPassword);

        buttonRegister = (Button) findViewById(R.id.buttonRegister);

        buttonRegister.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        try {
            Server MyServ = new Server();
            TextView ServerIP = (TextView)findViewById(R.id.textViewMessage);
            ServerIP.setText(":"+MyServ.getIpAddress().toString());
        } catch (IOException e) {
            e.printStackTrace();
        }

        //     String userName = etUserName.getText().toString();
        //    String passWord = etPassword.getText().toString();
        //    String DroidIP  = Serv.getIpAddress().toString();
        //    new SignupActivity(this).execute(userName, passWord,DroidIP);

        }
    }



Server (eredita da NanoHttpd)
Codice: [Seleziona]
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Map;
import java.util.logging.Logger;

/**
 * Created by Alessandro on 28/03/2016.
 */

public class Server extends NanoHTTPD {
    private final static int PORT = 5000;
    private final static String HostIP = "87.10.68.38";
    public Server() throws IOException {
        //super(HostIP,PORT);
        super(PORT);
        start();
        System.out.println( "\nRunning! Point your browers to http://"+getIpAddress()+":5000/ \n" );
    }

    @Override
    public Response serve(IHTTPSession session) {
        System.out.println("\npublic Response serve(IHTTPSession session) \n");
        String msg = "<html><body><h1>Hello server</h1>\n";
        msg += "<p>We serve " + session.getUri() + " !</p>";
        return newFixedLengthResponse( msg + "</body></html>\n" );

    }

    public String getIpAddress() {
        String ip = "";
        try {
            Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
                    .getNetworkInterfaces();
            while (enumNetworkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = enumNetworkInterfaces
                        .nextElement();
                Enumeration<InetAddress> enumInetAddress = networkInterface
                        .getInetAddresses();
                while (enumInetAddress.hasMoreElements()) {
                    InetAddress inetAddress = enumInetAddress
                            .nextElement();

                    if (inetAddress.isSiteLocalAddress()) {
                        ip = inetAddress.getHostAddress();
                    }
                }
            }

        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            ip += "Something Wrong! " + e.toString() + "\n";
        }
        return ip;
    }
}

Offline tonno16

  • Utente storico
  • *****
  • Post: 1231
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Server web con NanoHttpd su smartphon Samsung connesso in rete.
« Risposta #1 il: 31 Marzo 2016, 00:08:29 CEST »
0
Non puoi. Non funzionerà mai. Android non accetta connessioni del genere con ip pubblico

Offline alexdi

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Re:Server web con NanoHttpd su smartphon Samsung connesso in rete.
« Risposta #2 il: 01 Aprile 2016, 23:42:02 CEST »
0
Grazie 1000 per la risposta tonno16.

Nel frattempo ho scoperto anche che ,  la funzione getIpAddress() mi restituisce un determinato indirizzo IP mentre se col browser del device android vado su un sito per vedere il mio IP questo è differente da ciò che restituisce la funzione getIpAddress().

Quindi , ne deduco che l' operatore (TIM ma credo tutti) , assegna un IP locale (nattato ?)(si)

Ho provato a giocare un po con le porte ma niente da fare.

Quindi nanohttpd si usa solo in locale ?(si)

A quato punto mi chiedo: come faccio ad inviare comandi per esempio da un sito web da me gestito ad una ipotetica app sviluppata da me ed installata sul  device android? Per intenderci , tipo che ne so: l' app Cerberus (antifurto) ?

Mi piacerebbe capire quale sia la tecnica che viene utilizzata da queste tipologie di app.

Grazie ancora a tonno16 e a quanti possano rispondere a questa mia ulteriore richiesta.


Offline tonno16

  • Utente storico
  • *****
  • Post: 1231
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Server web con NanoHttpd su smartphon Samsung connesso in rete.
« Risposta #3 il: 02 Aprile 2016, 09:04:35 CEST »
0
Gli sono diversi ovviamente. Uno è per la LAN e l'altro per la wan. Uno incomincia con 196.168... E l'altro esempio x.y.z.t.

Devi usare le notifiche. Google gcm backendless parse e i restanti baas

Offline alexdi

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Re:Server web con NanoHttpd su smartphon Samsung connesso in rete.
« Risposta #4 il: 02 Aprile 2016, 12:39:08 CEST »
0
Grazie ancora tonno16!

In effetti ero già pasato dalle parti delle gcm google ma non avevo capito che facevano al caso mio.

Ora vedo come funzionano sperando di capire.

Nel frattempo ti ringrazio ancora per la tua disponibilità.