【问题标题】:Connecting to a router from a java program on Linux从 Linux 上的 java 程序连接到路由器
【发布时间】:2013-12-18 05:52:21
【问题描述】:

我正在开发一个从连接到路由器开始的 Java 应用程序。 这是代码:

try {
    Service service = new Service(new JIPImpl(new PacketHandlerIPv6()));    
    JOtionPane.showMessageDialog(null," Service Created " );
    JenNetIPNetwork network = service.createNetwork(new InetSocketAddress("fd04:bd3:80e8:2:215:8d00:32:54ff", 1873));
    Collection<Node> my_nodes = network.discoverNodes();

} catch (JipException e) {

    JOptionPane.showMessageDialog(null,"Couldn't connect To The Router, Error: "+ e.getMessage() );
    }

我得到的是第一条消息:“服务已创建”。 然后 service.create 没有执行并且抛出异常,这给了我消息:无法连接到路由器,错误:超时。

值得注意的是: 完全相同的 jar 文件在 Windows 7 上完美运行(最初开发的地方) 我只是在尝试在 Linux 上运行 jar 文件时遇到了这个问题。

当我在 android 上构建相同的程序时,我遇到了类似的问题,当我将互联网权限添加到清单时,它就解决了。是否应该添加类似的权限才能在 Linux 上使用互联网?

【问题讨论】:

  • 尝试从你的 Linux 机器上 telnet 看看。
  • 我怀疑这很可能是防火墙配置问题 - 检查您是否可以使用路由器制造商的软件在 Linux 机器和路由器之间实际通信,或者如果通过 Web 界面访问,则可以通过浏览器进行通信。还值得检查 Linux 框中的 IPv6 设置——确保它在正确的网络上有一个地址并且设置了适当的路由。
  • 路由器可以正常浏览网页,使用 IPv4 ping 路由器也可以正常工作。但是,使用上述地址(ipv6)ping 不起作用!!!结果:ping:未知主机 fd04:bd3:80e8:2:215:8d00:32 是否仍然是防火墙配置问题

标签: java android linux sockets raspberry-pi


【解决方案1】:

您的Linux机器似乎无法访问路由器和1873端口。您能ping通路由器吗?

ping6 fd04:bd3:80e8:2:215:8d00:32:54ff

你能到达路由器的1873端口吗?

telnet fd04:bd3:80e8:2:215:8d00:32:54ff 1873

使用最后一个,您应该会得到如下响应:

Trying fd04:bd3:80e8:2:215:8d00:32:54ff...
Connected to fd04:bd3:80e8:2:215:8d00:32:54ff.
Escape character is '^]'.

否则,路由器+端口似乎无法访问,可能是由于您的防火墙设置或网络设置。

实际上ping6 仅用于非常基本的完整性检查,它并不重要。例如,ICMP 数据包可能会被阻止,从而导致其失败。真正重要的部分是让telnet 工作,以确认您的机器可以同时访问主机端口。如果 telnet 有效,那么 Java 程序也应该有效。

更新

正如您自己发现的那样,ipv6 并未启用。您可以使用modprod ipv6 启用它,这将加载ipv6 内核模块。

下次最好提及您正在开发树莓派和操作系统(rasbian?),因为这可能对许多人来说是一个警钟。

【讨论】:

  • 如果我使用 ping 和同一路由器的 IPv4 地址,它可以正常工作。 ping 192.168.11.1 但是,如果我将 ping 与 IPv6 一起使用: ping fd04:bd3:80e8:2:215:8d00:32:54ff 它不起作用。知道为什么吗?
  • 我的错,使用ping6 而不是ping。如果您没有ping6 或它不起作用,那么您的IPv6 设置可能有问题。
  • 使用 ping6 我得到以下错误套接字:协议不支持地址系列。正如你所说,这似乎是一个 IPv6 设置问题,我将搜索如何解决它。如果您有想法,将不胜感激。感谢您的帮助
  • 嗯,telnet 更重要。 ICMP 数据包可能会被阻止,这不是问题。即使ping6 不起作用,如果telnet 起作用,那么Java 程序也应该如此。
  • 问题解决了,问题是没有启用ipv6。顺便说一句,我正在研究树莓派。所以我发现应该通过命令启用ipv6:“modprobe ipv6”然后它工作正常。谢谢@janos 非常感谢大家。
猜你喜欢
  • 2014-05-26
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多