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

标签 java networking datagram

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

我已让服务器依附于本地计算机上的端口 9321。

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

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

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

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

这是来源

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

    }

}

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

"The way routers work, you can't see your external (WAN) internet address from your internal network (LAN). If that's what you are trying to do, there's nothing wrong, it just won't work.

Ian."

有什么解释吗?

最佳答案

您可以采取的一些步骤:

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

出现此错误的其他一些原因:

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

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

关于java - 如何通过Internet发送数据报包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9444583/

相关文章:

java - VoIP RTP 流从/到服务器(在 Java 中)到/从 android

java - 数据报套接字上的 setSotimeout

java - 数据报总是被完整接收吗?

Java 未正确发送到串行端口

java - jar 没有在命令提示符下给出输出,但在 eclipse 中工作正常

c - 如何捕获tcp/ip数据包

ruby - Ruby 中的轮询()?

java - 找不到标志…?

java - Java 中的 servlet

android - 通过局域网访问django localhost服务器