2015-05-28 36 views
10

Obecnie wspiera klienta z poniższej architekturze, używany w procesie produkcji przemysłowej:widząc serwer WWW przez gniazdo. . .

  1. Mają program systemu Windows uruchomionego na komputerze, który steruje maszyn przemysłowych.

  2. Mają zastrzeżonych aplikacji (które utrzymania dla nich) działającym na urządzeniu z systemem Android (w zasadzie telefonu), które interfejsy bezprzewodowo za pomocą oprogramowania PC poprzez gniazda TCP, więc może zdalnie kontrolować te procesy przemysłowe.

Co klient chce teraz jest serwer WWW działa na komputerze i przeglądarce internetowej wbudowanej w aplikację do sterowania pewne dodatkowe procesy nie kontrolowane ze swojego programu Windows.

Ustanowiłem serwer WAMP na komputerze i przykładową stronę internetową, którą widzę w dowolnej przeglądarce na komputerze jako "localhost". Wiem, jak dodać widok przeglądarki do aplikacji Android za pośrednictwem klasy WebView.

Ale I nie wiem jak zrobić przeglądarkę w telefonie zobacz serwer WAMP na komputerze PC za pośrednictwem połączenia TCP. Jak podnieść te dwie rzeczy?

+1

serwer powinien mieć adres, powinien znajdować się w tej samej sieci, a serwer powinien być dostępny z tej sieci – njzk2

Odpowiedz

2

Cóż, jak podłączyć przeglądarkę do serwera? W przeglądarce sieciowej wpisujesz nazwę hosta lub adres IP na pasku adresu przeglądarki internetowej.

Podobny proces działa dla wbudowanej przeglądarki internetowej, wystarczy wywołać metodę loadUrl swojej instancji WebView.

Ważniejsze pytanie, jaką nazwę ma twój serwer sieciowy i wstawić http://. Jeśli serwer otrzyma statyczny adres IP, możesz go również użyć. Musisz jednak upewnić się, że WAMP nie tylko nasłuchuje na localhost, w przeciwnym razie nie może uzyskać dostępu z żadnego urządzenia (ale to nie jest pytanie dla Stackoverflow).

1

Zasadniczo w przypadku komputera z systemem Windows należy znać adres IP. Jest to adres w sieci, z którego korzystają inne urządzenia, aby się z nim skontaktować. Jeśli masz już otwarte gniazdo TCP/IP, znasz już ten adres.

HTTP jest protokołem opartym na protokole TCP. Działa tak jak gniazdo HTTP, domyślnie nasłuchując połączeń na porcie 80. Z dokumentacji wygląda na to, że domyślnym portem dla Wampa jest port 80.

Z działania połączenia zawierającego podgląd strony internetowej (z here):

private WebView webview; 

public void onCreate(Bundle savedInstanceState) { 
     [initialize stuff as needed ...] 

     this.webview = (WebView)findViewById(R.id.webview); 
     WebSettings settings = this.webview.getSettings(); 
     settings.setJavaScriptEnabled(true); 
     this.webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

     webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.i(TAG, "Processing webview url click..."); 
       view.loadUrl(url); 
       return true; 
      } 

      public void onPageFinished(WebView view, String url) { 
       Log.i(TAG, "Finished loading URL: " +url); 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Log.e(TAG, "Error: " + description); 
       Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
       alertDialog.setTitle("Error"); 
       alertDialog.setMessage(description); 
       alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         return; 
        } 
       }); 
       alertDialog.show(); 
      } 
     }); 
} 

Potem, gdy chcesz załadować lub przeładować URL do widoku internetowej:

this.webview.loadUrl("http://ipaddress/"); 

Gdzie adresip IP jest używany do podłączenia za pomocą TCP soc ket. Jeśli z jakiegoś powodu twój komputer z systemem Windows nie uruchamia serwera HTTP na porcie 80 (konfigurowalnym w httpd.conf, który jest dostarczany z Apache wewnątrz Wamp), możesz podać port również w adresie URL (port 8080 w tym przykładzie):

this.webview.loadUrl("http://ipaddress:8080/"); 
2

Co chcesz (nie tylko dla serwera WAMP ale XAMPP, lampa) jest statyczny adres IP, który można podłączyć do dowolnego punktu w czasie.

Inną rzeczą, o której wspomniałeś, były gniazda. Gniazda zapewniają bardzo podstawową transakcję danych i musisz zająć się wszystkim, HTTP jest protokołem warstwy aplikacji, który jest abstrakcją w stosunku do warstwy Transport. Przeglądarki internetowe (popularnie) używają protokołu HTTP. Here to różnica.

Do programowania gniazd tutaj są dwa łącza: link1 i link2.

Korzystanie z protokołu HTTP wymaga wysłania do serwera odpowiedzi GET lub POST, odebranej prawdopodobnie przez php lub django, które ją pobierają. O ile kod idzie. Proszę bardzo.

Na żądanie GET

public String sendGetRequest() { 
    HttpClient client = new DefaultHttpClient(); 
    URI website; 
    try { 
     website = new URI(url); 
     HttpGet request = new HttpGet(); 
     request.setURI(website); 

     HttpResponse response = client.execute(request); 
     return response; 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

Dla ofertę kupna

public String sendPostRequest(ArrayList<NameValuePair> nameValuePairs) { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(url); 

    try { 
     // Add your data 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 
     if (response != null) 
      return response; 
     else 
     { 
      Log.e("Request", "response is null"); 
      return null; 
     } 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
    return null; 
} 

Przetwarza odpowiedź na sprawdzenie, w jaki sposób serwer odpowiedział. Zadaniem tej aplikacji powinno być ułatwienie użytkownikowi nieudzielenia mu rozwiązania, które już istnieje. Sugeruję, abyś nie używał widoku internetowego (po prostu wyświetlaj odpowiednie informacje odpowiednio zorganizowane).

EDYTOWANIE: Oto dobre wytłumaczenie dla HTTP vs TCP.

6

Niektóre podstawowe informacje, które powinny być świadomy

Kiedy ten komputer łączy się z telefonem, instrumentu bazowego network interface muszą być stosowane, na przykład, Wi-Fi lub Ethernet. Pamiętaj też, że localhost jest kłamany pod numerem loopback interface. Należy zauważyć, że interfejs loopback jest dostępny tylko w samym urządzeniu (tj. Inne urządzenia nie mogą komunikować się z loopback innego urządzenia).

Po drugiej stronie, po podłączeniu interfejsu, zostanie mu przypisany numer IP address. Zakładam, że twój telefon jest podłączony do tego komputera przez interfejs Wi-Fi, więc w tym przypadku są używane dwa interfejsy.

  • wlan interfejs tego PC
  • wlan interfejsu telefonu.

enter image description here

I obie mają swoje unikalne adresy IP. Jeśli chcesz się połączyć z telefonu do tego komputera, powinieneś znać adres IP interfejsu wlan tego komputera.

Jeśli komputer jest oparty na systemie Linux, można napisać ifconfig i zobaczyć ten adres IP w polu inet addr (w sekcji wlan0). W przypadku komputerów z systemem Windows przeczytaj this page.


W Android WebView

Ten widok zapewnia metodę o nazwie loadUrl, który jest używany do pobierania zawartości HTML z zdalnych maszynach.Łańcuch należy przekazać do tej metody jest sformatowany w następujący sposób:

http://IP_ADDRESS:PORT_NUMBER 

Gdzie

  • IP_ADDRESS: adres IP zdalnego komputera. (W twoim przypadku, który znalazłeś w poprzednim kroku)
  • PORT_NUMBER: Każdy komputer może nasłuchiwać na różnych portach w różnych celach (np. HTTP, FTP, SSH, ...). Domyślnym portem dla HTTP jest 80.

Dlatego jeśli założymy, że adres IP tego komputera jest 192.168.0.1, wtedy powinieneś mieć:

webView.loadUrl("http://192.168.0.1:80"); 

Or

webView.loadUrl("http://192.168.0.1"); 
// Because 80 is the default port number for HTTP 
0

miałem ten sam problem, kiedy zbudowałem swój serwer WAMP i pokazałem bazę danych z mojego telefonu z Androidem.

Problem polega na tym, że WampServer jest lokalny, a unikalny sposób łączenia się z WAMP odbywa się przez Wi-Fi, ponieważ korzysta z tej samej infrastruktury.

Jeśli chcesz połączyć się z infrastrukturą, powinieneś zbudować publiczny Hosting i spróbować ponownie.

Pokaż nam kod logcat i sprawdź, czy masz uprawnienia do pliku manifestu.

<uses-permission android:name="android.permission.INTERNET" />