如何通过Internet发送数据报包?
问题描述:
我正在尝试使用Java创建一个基本的数据报客户机/服务器程序。如何通过Internet发送数据报包?
我让服务器挂在我的本地计算机上的端口9321。
我已经在本地计算机上的端口9320上创建了客户端,然后通过无线路由器网络(192.168.1.100)在端口9321 上发送数据。
然后我尝试通过端口9321 发送数据包(通过路由器)互联网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());
}
}
我从另一个论坛上说,它还有另外一个答案:
“路由器的工作方式,您不能从您的内部网络(LAN)看到您的外部(WAN)Internet地址。如果这就是你想要做的,没有什么不对,它 就是行不通的。
伊恩“
任何解释
答
,您可以采取一些步骤:?
- 检查代码工作在两台机器在局域网上
- 检查
ping <target-ip>
适用于您的机器。 - 如果是这样,请检查您的本地和用于在端口/协议上阻塞的LAN防火墙设置。
- 如果端口未被阻塞,请将端口更改为其他值。一些ISP会阻止某些端口。
一些更多的原因这个错误可以拿出:
UDP(我假设?)数据报太大。客户端错误不影响接收(见过类似的事情与一些网络堆栈,其中错误是虚假的。)
后从patsebin或者如果你想要的东西,你的代码的链接更多信息。
只是为了澄清 - 全球网络==互联网?您的本地PC确实有公开可用的IP地址(您提到的IP属于运营商)? – home 2012-02-25 14:05:22
啊是的,我的意思是互联网。 专用网络是我的路由器。 – 2012-02-25 14:08:09
如果您使用IP数据报,请始终考虑其TTL。 – ecle 2012-02-25 15:11:40