2015-05-28 23 views
10

Hiện nay tôi hỗ trợ khách hàng với kiến ​​trúc sau đây, được sử dụng trong quá trình sản xuất công nghiệp:xem máy chủ web qua ổ cắm. . .

  1. Họ có một chương trình Windows đang chạy trên một máy tính điều khiển các máy móc công nghiệp.

  2. Chúng có ứng dụng độc quyền (mà tôi duy trì cho chúng) chạy trên thiết bị Android (về cơ bản là điện thoại) giao tiếp không dây với phần mềm PC qua ổ cắm TCP, để điều khiển từ xa các quy trình công nghiệp đó.

Những gì khách hàng muốn bây giờ là một máy chủ web chạy trên PC và trình duyệt web được tích hợp vào một số ứng dụng không được kiểm soát từ chương trình Windows của mình.

Tôi đã thiết lập máy chủ WAMP trên PC và một trang web mẫu, mà tôi có thể thấy trên bất kỳ trình duyệt nào trên PC dưới dạng "localhost". Tôi biết cách thêm trình duyệt web Xem vào ứng dụng Android thông qua lớp WebView.

Nhưng tôi không biết cách làm cho trình duyệt trên điện thoại nhìn thấy máy chủ WAMP trên PC thông qua kết nối TCP. Làm thế nào để móc hai thứ đó lên?

+1

máy chủ phải có địa chỉ, chúng phải ở trên cùng một mạng và máy chủ có thể truy cập được từ mạng đó – njzk2

Trả lời

2

Vâng, làm thế nào để bạn kết nối một webbrowser với máy chủ? Trên trình duyệt web trên máy tính để bàn, bạn nhập tên máy chủ lưu trữ hoặc địa chỉ ip vào thanh địa chỉ của trình duyệt web.

Một quy trình tương tự hoạt động cho trình duyệt web được nhúng, bạn chỉ cần gọi phương thức loadUrl của phiên bản WebView của bạn.

Câu hỏi quan trọng hơn tên mạng máy chủ web của bạn có và thêm chi tiết http://. Nếu máy chủ nhận địa chỉ IP tĩnh, bạn cũng có thể sử dụng địa chỉ đó. Tuy nhiên bạn phải đảm bảo WAMP không chỉ lắng nghe trên localhost, nếu không nó không thể truy cập từ bất kỳ thiết bị nào (nhưng đó không phải là một câu hỏi cho Stackoverflow).

1

Về cơ bản, đối với máy Windows, bạn cần phải biết địa chỉ IP. Đây là địa chỉ trên mạng mà các thiết bị khác sẽ sử dụng để liên hệ với nó. Nếu bạn đã có một ổ cắm TCP/IP mở, thì bạn đã biết địa chỉ này.

HTTP là giao thức dựa trên TCP. Nó hoạt động giống như ổ cắm HTTP của bạn, nghe theo mặc định cho các kết nối trên cổng 80. Từ tài liệu, có vẻ như cổng mặc định cho Wamp là cổng 80.

Từ hoạt động kết nối của bạn có chứa chế độ xem web (từ 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(); 
      } 
     }); 
} 

Sau đó, bất cứ khi nào bạn muốn tải hoặc tải lại URL vào xem web:

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

đâu ipaddress là IP mà bạn sử dụng để kết nối sử dụng soc TCP của bạn ket. Nếu vì lý do nào đó, máy Windows của bạn không chạy máy chủ HTTP trên cổng 80 (có thể cấu hình trong httpd.conf đi kèm với Apache bên trong Wamp), bạn cũng có thể chỉ định cổng trong URL (cổng 8080 trong ví dụ này):

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

Điều bạn muốn (không chỉ cho máy chủ WAMP mà là XAMPP, LAMP) là địa chỉ IP tĩnh mà bạn có thể kết nối tại bất kỳ thời điểm nào.

Một điều khác mà bạn đã đề cập là ổ cắm. Ổ cắm cung cấp giao dịch dữ liệu rất cơ bản và bạn cần phải chăm sóc mọi thứ, HTTP là một giao thức tầng ứng dụng trừu tượng trên lớp Transport. Trình duyệt web (phổ biến) sử dụng HTTP. Here là sự khác biệt.

Để lập trình socket ở đây là hai liên kết: link1link2.

Sử dụng HTTP yêu cầu gửi phản hồi GET hoặc POST đối với máy chủ, nhận được có thể là do php hoặc django nhận từ đó. Theo như mã đi. Đây rồi.

Đối với GET Yêu cầu

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; 
} 

Đối POST Request

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; 
} 

Phân tích các phản ứng để kiểm tra như thế nào máy chủ trả lời. Chức năng của ứng dụng nên dễ dàng để người dùng không cung cấp cho anh ta giải pháp đã tồn tại. Tôi khuyên bạn nên chống lại bằng cách sử dụng webview (chỉ hiển thị các thông tin có liên quan được tổ chức đúng cách).

EDIT: Đây là lời giải thích tốt cho HTTP vs TCP.

6

Một số thông tin cơ bản mà bạn cần phải nhận thức

Khi máy tính kết nối với điện thoại của bạn, một tiềm ẩn network interface phải được sử dụng, ví dụ, WiFi hoặc Ethernet. Cũng lưu ý rằng localhost được đặt trên loopback interface. Cần lưu ý rằng giao diện loopback chỉ có thể truy cập được trong chính thiết bị (tức là các thiết bị khác không thể kết nối với loopback của thiết bị khác).

Ở phía bên kia, khi giao diện được kết nối, giao diện sẽ được gán IP address. Tôi giả sử rằng điện thoại của bạn được kết nối với máy tính đó thông qua giao diện WiFi, Vì vậy, trong trường hợp này hai giao diện đang được sử dụng.

  • wlan giao diện điều đó PC
  • wlan giao diện của điện thoại.

enter image description here

Và cả hai đều có địa chỉ IP duy nhất của họ. Nếu bạn muốn kết nối từ điện thoại đến máy tính đó, bạn nên biết địa chỉ IP của giao diện wlan của PC đó.

Nếu PC của bạn chạy trên nền Linux, bạn có thể viết ifconfig và xem địa chỉ IP đó trong trường inet addr (Trong mục wlan0). Đối với các máy Windows, hãy đọc this page.


Trong Android WebView

Xem này cung cấp một phương pháp gọi là loadUrl được sử dụng để lấy nội dung HTML từ các máy từ xa.Chuỗi bạn nên chuyển cho phương pháp này được formated như sau:

http://IP_ADDRESS:PORT_NUMBER 

đâu

  • IP_ADDRESS: địa chỉ IP của máy tính từ xa. (Trong trường hợp của bạn mà bạn đã tìm thấy ở bước trước)
  • PORT_NUMBER: Mỗi máy có thể nghe trên các cổng khác nhau cho các mục đích khác nhau (ví dụ: HTTP, FTP, SSH, ...). Mặc định cổng cho HTTP là 80.

Do đó, nếu chúng ta giả định rằng địa chỉ IP của máy tính đó là 192.168.0.1, sau đó bạn nên có:

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

Hoặc

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

tôi đã có cùng một vấn đề khi tôi xây dựng máy chủ WAMP của tôi và hiển thị cơ sở dữ liệu từ điện thoại Android của tôi.

vấn đề là WampServer là localHost và cách duy nhất để kết nối với WAMP là thông qua Wifi, vì sử dụng cùng một cơ sở hạ tầng.

Nếu bạn muốn kết nối ra khỏi cơ sở hạ tầng của mình, bạn nên xây dựng một Hosting công cộng và thử lại.

Vui lòng chỉ cho chúng tôi nhật ký và xem xét nếu bạn có quyền trên tệp kê khai của mình.

<uses-permission android:name="android.permission.INTERNET" /> 
Các vấn đề liên quan