【发布时间】:2015-07-24 20:26:22
【问题描述】:
如何使用套接字程序 ping 一个 IP 地址并通过它发送数据?
【问题讨论】:
-
你看过this question吗?
标签: java sockets networking ip ping
如何使用套接字程序 ping 一个 IP 地址并通过它发送数据?
【问题讨论】:
标签: java sockets networking ip ping
您不能在 Java 中执行 ping - ping 工作在 ICMP 级别,它在 IP 之上工作,而 Java 提供对 UDP(位于 IP 之上)和 TCP(再次在 IP 之上)的支持。它基本上是一个不同的(更高级别)协议,您需要编写自己的(本机)库才能访问 IP 堆栈。
【讨论】:
Ping 是一种特定的 ICMP 协议。您不能在纯 Java 中发送 ICMP 数据包。
但是,您可以打开一个 TCP 套接字到特定端口并向其发送一些数据。有数百万个关于如何做到这一点的教程示例。
我建议你看看这些
http://www.google.co.uk/search?q=java+socket+tutorial 600 万条结果
http://www.google.co.uk/search?q=java+socket+example 1160 万条结果。
你可以只发送一个字符
Socket s = new Socket(hostname, port);
s.getOutputStream().write((byte) '\n');
int ch = s.getInputStream().read();
s.close();
if (ch == '\n') // its all good.
【讨论】:
Ping 使用 java 中不可用的 ICMP 协议。这可能是在 java 中 ping 服务器的更好方法是:
try{
String s = null;
List<String> commands = new ArrayList<String>();
commands.add("ping");
commands.add("192.168.2.154");
ProcessBuilder processbuilder = new ProcessBuilder(commands);
Process process = processbuilder.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null)
{
System.out.println(s);
}
}catch (Exception e) {
System.out.println("This is sad ");
}
另一种方法是使用纯 Java 套接字。
【讨论】: