【发布时间】: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