【问题标题】:How to send datagram packet through Internet?如何通过 Internet 发送数据报包?
【发布时间】:2023-03-12 02:25:01
【问题描述】:

我正在尝试用 Java 制作一个基本的数据报客户端/服务器程序。

我已经让服务器连接到我本地计算机上的 9321 端口。

我在本地计算机的端口 9320 上创建了客户端, 然后通过无线路由器网络(192.168.1.100)在端口 9321 发送数据 该程序有效!

然后我尝试通过(通过路由器)互联网 IP 139.195.12.183(我的 IP)在端口 9321 发送数据包 但它没有用! 有这个例外:

java.net.SocketException: Interrupted function call: Datagram send failed

我已将路由器设置为将对端口 9321 的任何请求转发到我的计算机 然后我在该端口上为我的计算机上的防火墙设置了例外

这是来源

String SERVER = "139.195.12.183";

sendString(SERVER, 9321, "Greetings"); <<


private void sendString(String IP, int port, String toSend) {
    byte[] buf = toSend.getBytes();
    DatagramPacket packet = null;
    try {

        packet = new DatagramPacket(buf, buf.length, InetAddress.getByName(SERVER), port);

        ds.send(packet);<<
    }catch(UnknownHostException e) {
        System.out.println("unknownhostception");
    }catch(IOException e) {
        System.err.println("ioception "+e.getMessage());

    }

}

我从另一个论坛得到了另一个答案:

“按照路由器的工作方式,您无法从您的 内部网络 (LAN)。如果这就是你想要做的,那就没有错,它 就是行不通。

伊恩。”

有什么解释吗?

【问题讨论】:

  • 澄清一下 - 全球网络 == 互联网?您的本地 PC 是否有公开可用的 IP 地址(您提到的 IP 属于运营商)?
  • 啊,是的,我的意思是互联网。专用网络是我的路由器。
  • 如果您使用 IP 数据报,请始终考虑其 TTL。
  • 看不到代码有什么问题。我会抓住wireshark来看看发送了什么。
  • @brice 我已经安装了wireshark,数据包甚至没有被发送(没有数据包)

标签: java networking datagram


【解决方案1】:

您可以采取的一些步骤:

  1. 检查代码是否适用于您 LAN 上的两台机器。
  2. 检查 ping &lt;target-ip&gt; 是否在您的计算机上运行。
  3. 如果是这样,请检查您的本地 LAN 防火墙设置以阻止端口/协议。
  4. 如果端口未阻塞,请将端口更改为其他端口。一些 ISP 会阻止某些端口。

可能出现此错误的更多原因:

  • UDP(我假设?)数据报太大。
  • 不影响接收的客户端错误(在某些网络堆栈中看到类似的错误是虚假的。)

如果您想了解更多信息,请发布来自 patsebin 或其他内容的代码链接。

【讨论】:

  • 第一步是成功 ping 目标是成功(没有跃点!)路由器设置(转发)到我的计算机已启用(在端口 9321 上)我认为端口 9321 没有被 ISP 阻止(但我试试看!)
  • IP数据报设置的TTL值是多少? TTL 为 1 只会在第一个路由器上持续并且永远不会超过它。 en.wikipedia.org/wiki/Time_to_live
  • 很好,我忘了提。虽然我不确定 Keenan 是否会收到发送异常。
  • DatagramSocket 无法设置 TTL,所以我必须使用 MulticastSocket?它们之间有什么区别?
  • @KeenanGebze 是的,DatagramSocket(IP 单播数据报)MulticastSocket(IP 多播“数据报”)真的很麻烦,对吧?检查这个错误问题bugs.sun.com/bugdatabase/view_bug.do?bug_id=4740586
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 2017-11-18
  • 2015-07-07
  • 1970-01-01
  • 2017-11-22
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多