1

我正在尝试用 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) 中看到您的外部 (WAN) 互联网地址。如果这就是您想要做的,那就没有错,它只是行不通。

伊恩。”

有什么解释吗?

4

1 回答 1

0

您可以采取的一些步骤:

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

出现此错误的更多原因:

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

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

于 2012-02-25T14:21:39.373 回答