![可以从 RPi 连接到笔记本电脑,但不能以其他方式连接](https://linux22.com/image/32980/%E5%8F%AF%E4%BB%A5%E4%BB%8E%20RPi%20%E8%BF%9E%E6%8E%A5%E5%88%B0%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%83%BD%E4%BB%A5%E5%85%B6%E4%BB%96%E6%96%B9%E5%BC%8F%E8%BF%9E%E6%8E%A5.png)
我正在用 Java 开发一个服务器客户端应用程序(基于命令行)。我想在我的 Raspberry Pi (RPi) 上运行它,但事实证明我无法从笔记本电脑登录到我的服务器部分。问题是,当运行我的应用程序的服务器部分(套接字、端口 4444)时,我可以从 RPi 连接 telnet,没有任何问题。
当我在 RPi 上运行服务器部分时,无法建立连接。我对 Linux 不太熟悉,但这是我需要在 iptables 中做的事情吗?其他建议?
答案1
对于初学者来说,我会确保防火墙(iptables)不是问题。您可以在 RPi 上使用以下命令进行确认:
$ iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
如果防火墙看起来正常(如上所述),则启动您的 Java 应用程序,并使用以下命令确认它正在侦听正确的端口:
$ netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 970/xbmc.bin
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/xbmc.bin
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 936/sshd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1086/smbd
tcp 0 0 192.168.1.85:22 192.168.1.20:34971 ESTABLISHED 6762/0
tcp 0 0 :::53 :::* LISTEN 829/connmand
tcp 0 0 :::22 :::* LISTEN 936/sshd
tcp 0 0 :::445 :::* LISTEN 1086/smbd
此命令显示每个守护程序正在侦听的 IP 地址和端口。例如,以下行:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/xbmc.bin
显示进程 ID 为 970 的进程 (xbmc.bin) 正在所有接口 (0.0.0.0) 上侦听端口 80。最后一位“所有接口”意味着如果有多个网络接口(以太网、wifi 等),则守护进程将接受来自其中任何一个的连接。
如果它只是表示一个 IP 地址,例如 192.168.1.10,那么守护程序将只接受来自分配有该 IP 地址的接口的连接。
最后要注意的是,上述守护进程将接受的连接类型是 TCP。另一种类型是 UDP,该守护程序不接受这种类型。