如何通过互联网发送数据报包



我正在尝试用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)。如果这就是你想做的,那没什么错,只是就是不起作用。

伊恩。"

有什么解释吗?

您可以采取的一些步骤:

  1. 检查代码是否能在局域网上的两台机器上运行
  2. 检查ping <target-ip>是否在您的机器上工作
  3. 如果是,请检查您的本地LAN防火墙设置是否阻止端口/协议
  4. 如果端口未被阻止,请将端口更改为其他端口。一些ISP会阻止某些端口

出现此错误的更多原因:

  • UDP(I假设?)数据报太大
  • 不影响接收的客户端错误(在一些网络堆栈中也看到过类似的情况,错误是伪造的。)

如果你想了解更多信息,可以从patsebin或其他地方发布你的代码链接。

最新更新