java实现Ping示例代码详解编程语言

这个示例不是真正实现ping用来检测是否alive,因为Socket类没有足够操作的权限,但是我们可以模仿ping,通过”echo port”实现,在server端,”echo port”端口一般是7,我们往这个端口写入一个字符串,然后这个server会返回这个字符串。

import java.io.*; 
import java.net.*; 
 
public class PseudoPing { 
  public static void main(String args[]) { 
    try { 
      Socket t = new Socket(args[0], 7); 
      DataInputStream dis = new DataInputStream(t.getInputStream()); 
      PrintStream ps = new PrintStream(t.getOutputStream()); 
      ps.println("Hello"); 
      String str = dis.readLine(); 
      if (str.equals("Hello")) 
        System.out.println("Alive!") ; 
      else 
        System.out.println("Dead or echo port not responding");               
      t.close(); 
    } 
    catch (IOException e) { 
      e.printStackTrace();} 
    } 
  } 
}

ps.从JDK1.5之后,java.net.InetAddress.isReachable(int)可以用来检测一个服务器是否alive状态。

import java.io.*; 
import java.net.*; 
 
public class ReachableTest { 
 public static void main(String args[]) { 
     try { 
       InetAddress address = InetAddress.getByName("web.mit.edu"); 
       System.out.println("Name: " + address.getHostName()); 
       System.out.println("Addr: " + address.getHostAddress()); 
       System.out.println("Reach: " + address.isReachable(3000)); 
     } 
     catch (UnknownHostException e) { 
       System.err.println("Unable to lookup web.mit.edu"); 
     } 
     catch (IOException e) { 
       System.err.println("Unable to reach web.mit.edu"); 
     } 
   } 
}

如果有权限的话isReachable()方法会使用ICMP ECHO REQUESTs;没权限的话会尝试在向目标主机的端口号7上建立tcp连接。 不过多数站点主机都禁用这个请求。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10945.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论