连接到本地网络 Raspberry Pi

Connecting to a local network Raspberry Pi

我有一个:

Rasberry Pi 2

运行

Raspbian Jessie Version:November 2015

我正在使用 Undertow(一个 Java http 服务器)为网站提供服务。这是我用来构建服务器的代码。

Undertow server = Undertow.builder()
                   .addHttpListener(8890, "localhost")
                   .setHandler(Handlers.pathTemplate()
                      .add("/", resource(new PathResourceManager(staticFilePath, 100))
                              .setDirectoryListingEnabled(false))
                   .build();

问题:尽管能够通过 ping 和 SSH 连接到 PI,但我无法从本地网络上的另一台机器上看到网络服务器。

我做了什么(在 Pi2 上):

wget localhost:8890

returns index.html 正确

netstat -lptn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
tcp6       0      0 127.0.0.1:8890          :::*                    LISTEN      1743/java  

Chrome 在我的开发机器 192.168.1.8:8890 上给出 ERR_CONNECTION_REFUSED

wget 192.168.1.8:8890

连接到 192.168.1.8:8890...失败:连接被拒绝。

nmap 192.168.1.8

Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-05 14:05 CST
Nmap scan report for 192.168.1.8
Host is up (0.039s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 1.83 seconds

据我所知,没有防火墙,所以我很困惑为什么我无法从我的开发机器上看到服务器。

参见:

tcp6       0      0 127.0.0.1:8890    :::*      LISTEN      1743/java  

您的网络服务器仅侦听本地主机地址 (127.0.0.1)。这样就无法从本地主机以外的任何地方访问它。

并且您的 nmap 扫描显示相同:唯一可远程访问的端口是 22。

要远程访问此服务,您必须将 Web 服务器绑定到属于此 raspberry pi (192.168.1.8) 或 "any address" 0.0.0.0 的任何非本地地址,因为 SSH 服务是绑定。

如何执行此操作已在您的网络服务器手册中进行了说明。可能,您必须从“-d”参数开始,即

standalone.sh -b=0.0.0.0
standalone.sh -Djboss.bind.address=0.0.0.0

或类似这样的内容。

在侦听器设置代码中看起来像这样

"localhost" 必须替换为某些 public 名称。这可能是“0.0.0.0”或“192.168.1.8”。我们也可以

cat "192.168.1.8 somename" >> /etc/hosts

然后使用某个名称:

Undertow server = Undertow.builder() .addHttpListener(8890, "somename")