首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过套接字看到web服务器。。。

通过套接字看到web服务器。。。
EN

Stack Overflow用户
提问于 2015-05-28 15:43:18
回答 5查看 1.6K关注 0票数 10

目前,我支持具有以下体系结构的客户端,用于工业制造过程:

  1. 他们有一个Windows程序运行在控制工业机器的个人电脑上。
  2. 他们有一个专有的应用程序(我为他们维护)运行在一个Android设备上(基本上是一部手机),它通过TCP套接字与PC软件无线接口,因此它可以远程控制这些工业过程。

客户端现在想要的是一个运行在PC上的web服务器和一个内置在应用程序中的web浏览器,以控制一些不是由他的Windows程序控制的附加进程。

我已经在PC上设置了一个WAMP服务器和一个示例网页,我可以在PC上的任何浏览器上看到它为"localhost“。我知道如何通过WebView类向安卓应用程序添加web浏览器视图。

但是我不知道如何让手机上的浏览器通过TCP连接在PC上看到WAMP服务器。我该怎么把这两件事联系起来?

EN

回答 5

Stack Overflow用户

发布于 2015-06-02 20:12:43

一些你应该知道的基本信息

当PC连接到您的手机时,必须使用底层的网络接口,例如,WiFi或以太网。还要注意,localhost回送接口上是被欺骗的。应该注意的是,loopback接口只能在设备本身中访问(也就是说,其他设备不能与另一个设备的loopback通信)。

在另一边,一旦连接了接口,就会为它分配一个IP地址。我假设您的电话是通过WiFi接口连接到该PC上的,因此在本例中使用了两个接口。

  • 该PC机的wlan接口
  • 你手机的wlan接口。

而且都有自己独特的IP地址。如果你想从你的手机连接到那台电脑,你应该知道该PC的无线局域网接口的IP地址。

如果您的PC是基于Linux的,您可以编写ifconfig并在inet addr字段中看到IP地址(在wlan0部分下)。对于Windows机器,请阅读此页

安卓中的 WebView

此视图提供了一个名为loadUrl的方法,用于从远程计算机中获取HTML。应该传递给此方法的字符串格式如下:

代码语言:javascript
复制
http://IP_ADDRESS:PORT_NUMBER

哪里

  • IP_ADDRESS:远程计算机的IP地址。(在您的例子中,您在前面的步骤中找到了一个)
  • PORT_NUMBER:每台机器都可以通过不同的端口监听不同的目的(例如HTTP、FTP、SSH、.)。HTTP的默认端口是80。

因此,如果我们假设该PC的IP地址是192.168.0.1,那么您应该拥有:

代码语言:javascript
复制
webView.loadUrl("http://192.168.0.1:80");

代码语言:javascript
复制
webView.loadUrl("http://192.168.0.1");
// Because 80 is the default port number for HTTP
票数 6
EN

Stack Overflow用户

发布于 2015-06-02 18:05:25

那么,如何将Well浏览器连接到服务器呢?在桌面浏览器上,您可以在浏览器的地址栏中键入主机名或ip地址。

类似的流程适用于嵌入式the浏览器,您只需调用WebView实例的方法WebView即可。

更重要的问题是,您的web服务器有什么网络名称,以及http://的前面。如果服务器获得静态IP地址,您也可以使用该地址。但是,您必须确保WAMP不仅侦听localhost,否则它不能从任何设备访问(但这不是一个问题的堆栈溢出)。

票数 2
EN

Stack Overflow用户

发布于 2015-06-02 18:51:18

您想要的(不仅对于WAMP服务器,而且对于XAMPP,LAMP)是一个静态IP地址,您可以在任何时候连接到它。

你提到的另一件事是套接字。套接字提供非常基本的数据事务,您需要处理一切,HTTP是一个应用层协议,是传输层的抽象。Web浏览器(通常)使用HTTP。这里是不同的。

对于套接字编程,这里有两个链接:link1link2

使用HTTP需要向服务器发送GET或POST响应,可能是由php或django接收的。就密码而言。这就是你要的。

索取请求

代码语言:javascript
复制
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;
}

请求员额

代码语言:javascript
复制
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;
}

解析响应以检查服务器的响应方式。应用程序的功能应该是减轻用户的负担,而不是为用户提供已经存在的解决方案。我建议您不要使用webview(只需显示相关信息,组织得当)。

编辑:这里的HTTP与TCP的一个很好的解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30511254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档