如何通过Internet发送数据报包?

时间:2012-02-25 13:56:36

标签: java networking datagram

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

我已经让服务器依赖我本地计算机上的端口9321.

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

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

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());

    }

}

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

  

“路由器的工作方式,您无法从您的网络中看到您的外部(WAN)互联网地址   内部网络(LAN)。如果这就是你想要做的事情,那就没有错   只是行不通。

     

伊恩。“

任何解释?

1 个答案:

答案 0 :(得分:0)

您可以采取的一些步骤:

  1. 检查代码是否适用于LAN上的两台计算机。
  2. 检查ping <target-ip>是否适用于您的计算机。
  3. 如果是,请检查本地 LAN防火墙设置是否阻止端口/协议。
  4. 如果端口未被阻止,请将端口更改为其他端口。一些ISP将阻止某些端口。
  5. 可能出现此错误的更多原因:

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

    如果您想了解更多信息,请从patsebin发布您的代码链接。