【问题标题】:How to ping an IP using a socket and send data through it?如何使用套接字 ping IP 并通过它发送数据?
【发布时间】:2015-07-24 20:26:22
【问题描述】:

如何使用套接字程序 ping 一个 IP 地址并通过它发送数据?

【问题讨论】:

标签: java sockets networking ip ping


【解决方案1】:

您不能在 Java 中执行 ping - ping 工作在 ICMP 级别,它在 IP 之上工作,而 Java 提供对 UDP(位于 IP 之上)和 TCP(再次在 IP 之上)的支持。它基本上是一个不同的(更高级别)协议,您需要编写自己的(本机)库才能访问 IP 堆栈。

【讨论】:

    【解决方案2】:

    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 并发送数据字符串 '/n' 或 '\n'
    • s.getOutputStream().write((byte) '\n');不返回
    • @VasilValchev 你能澄清一下你的意思吗?
    【解决方案3】:

    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 套接字。

    【讨论】:

    • 下定决心。 ping 在 Java 中不可用,或者您可以使用纯 Java 套接字进行。不能同时进行。
    • 没有直接的 API 可以 ping 另一个系统。通过使用 processBuilder 我们调用系统进程。要使用不需要任何其他系统进程帮助的纯 java 组件,我们需要使用 Sockets。
    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多