Java知识点复习系列(2)

来源:互联网 发布:宋代权知开封府事 编辑:程序博客网 时间:2024/06/06 07:42

前言

这里记录今天对Java网络操作的一些案例的笔记,每次复习觉得自己对这个知识点理解越深 , 其实我们一定要理解这个知识点可以做什么事情.

总结归类

  1. 获取指定主机的IP地址
  2. 查看端口是否被占用
  3. 获取本机的IP和名称
  4. 获取远程文件的大小
  5. 获取网站响应头的信息
  6. 获取返回数据包中的所有信息
  7. 综合项目
    要求:
    写一个方法, 要求可以获取任何指定网站的响应头数据包信息.
    和这个网站的IP.并且根据数据包解析出它的服务器和状态码
    输出格式:
域名:xxxxxx IP:XXXX状态码:XXX服务器:XXX 

笔记代码

package url;import java.io.IOException;import java.net.HttpURLConnection;import java.net.InetAddress;import java.net.MalformedURLException;import java.net.Socket;import java.net.URL;import java.net.URLConnection;import java.net.UnknownHostException;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Java网络实例复习 *  * @author Administrator * */public class UrlMain {    /**     * 案例1:获取指定主机的IP地址      * 知识点:InetAddress类库的使用     */    public static void getIPAddress() {    try {        InetAddress address = InetAddress.getByName("www.baidu.com");        String ip = address.getHostAddress();        System.out.println("获取到的IP为:" + ip);    } catch (Exception e) {        e.printStackTrace();    }    }    /**     * 案例2:查看端口是否被占用     * 知识点:我们写的端口扫描工具也是利用这个原理(Socket的使用)     */    public static void isOpenPort() {    String host = "localhost";    Socket s = null;    for(int i = 0 ; i < 65535 ; i++ ) {        try {        s = new Socket(host , i );        System.out.println("开启端口号:" + i );         s.close();        } catch (IOException e) {        }     }    }    /**     * 案例3:获取本机的IP和名称     * 知识点:InetAddress类库的使用     */    public static void getCurrent() {    try {        InetAddress address = InetAddress.getLocalHost();        String name = address.getHostName();        String ip = address.getHostAddress();        System.out.println("当前Host名:" + name + "\t当前IP:" + ip  );    } catch (UnknownHostException e) {        e.printStackTrace();    }    }    /**     * 获取远程文件的大小     * URLConnection类库的使用     */    public static void getUrlFileSize() {    try {        URL fileURL = new URL("http://img.taopic.com/uploads/allimg/120727/201995-120HG1030762.jpg");        URLConnection urlConn = fileURL.openConnection(); // 打开连接        urlConn.connect(); // 建立连接        int size = urlConn.getContentLength(); // 返回数据包中的大小        System.out.println("当前网页文件的大小为:" + size);        System.out.println();    }catch(Exception e ) {        e.printStackTrace();    }    }    /**     * 获取网站响应头的信息     * 知识点:获取状态码 , 数据包长度 , 数据包返回时间     */    public static void getRequestInfo() throws Exception {    URL url = new URL("http://www.baidu.com" );    //转成HTTP连接    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();    httpConn.connect();//建立连接    int retCode = httpConn.getResponseCode();   //返回它的状态码    int dataLength = httpConn.getContentLength();   //返回数据包的长度    long reQuest = httpConn.getDate();    System.out.println(retCode + "\t" + dataLength + "\t数据包返回的时间缀:" + reQuest );    }    /**     * 获取返回数据包中的所有信息     * 知识点:     */    public static void getRequestAllInfo() {    try {        URL url = new URL("http://www.baidu.cn" );        URLConnection conn = url.openConnection();        Map map  = conn.getHeaderFields();  //获取所有头变量(也就是返回的数据包)        Iterator<String> iterator = map.keySet().iterator();/*      //方法一:        while(iterator.hasNext() ) {        String key = iterator.next();   //获取的是key值        String val = conn.getHeaderField(key ); //通过Conn对象下的一个方法通过key值获取val值        System.out.println(key + "\t" + val );        }*/        //方法二:        Set<String > set = map.keySet();        for(String key : set ) {        String val = conn.getHeaderField(key );        System.out.println(key + "\t" + val );        }        //获取连接最后修改时间       System.out.println(conn.getLastModified() );    } catch (MalformedURLException e) {        e.printStackTrace();    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    }    /**     * 要求:写一个方法, 要求可以任何指定网站的响应头数据包信息.     * 和这个网站的IP.并且根据数据包解析出它的服务器和状态码     * 输出格式:    域名:xxxxxx      *      IP:XXXX     *      状态码:     *      服务器:         * 错误:     * 对于其它网站就解析不了 , 不明白怎么回事 .       */    public static void  parseURL(String url ) {    try {        //获取IP地址和域名(获取时域名不可以加上/和http)        InetAddress inet = InetAddress.getByName(url );        String hostIp = inet.getHostAddress();        String hostName = inet.getHostName();        //获取状态码和解析服务器        url = "http://" + url;        StringBuilder buiulder = new StringBuilder();        URL Url = new URL(url );        URLConnection urlConn = Url.openConnection();        Map map = urlConn.getHeaderFields();        Set<String > set = map.keySet();        for(String s : set ) {        String val = urlConn.getHeaderField(s );    //通过key值获取到val值        buiulder.append(s + ":" + val + "\n" );         }        //利用正则来获取服务器和状态码        String reg = "(HTTP/.+\\s)(Server:.+)";     //注意,如果是多个正则表达式时 , 一定要要加| , 直接用()隔开即可.        Pattern pattern = Pattern.compile(reg );        Matcher matcher = pattern.matcher(buiulder );        System.out.println(buiulder.toString()  );        String sever = null;        String code = null;        while(matcher.find() ) {        code = matcher.group(1 );   //第一个正则匹配到的        sever = matcher.group(2 );  //第二个正则匹配到的        }        // 开始修改截取到的服务器和状态码的值        System.out.println(code + sever );        sever = sever.substring(sever.indexOf(":") + 1);        reg = "\\s\\w+";        pattern = Pattern.compile(reg);        matcher = pattern.matcher(code);        while (matcher.find()) {        code = matcher.group(0);        System.out.println(code );        }        System.out.println("查询到的信息如下:--------------------" );        System.out.println("网站:" + hostName );        System.out.println("IP:" + hostIp );        System.out.println("状态码:" + code );        System.out.println("服务器:" + sever );        System.out.println("查询结束---------------------------" );    }catch(Exception e ) {        e.printStackTrace();    }    }    /**     * 测试方法     * @param args     */    public static void main(String[] args) {    // 案例一:    //getIPAddress();    //案例二:    //isOpenPort();    //案例三:    //getCurrent();    //案例四    //getUrlFileSize();    //案例五/*  try {        getRequestInfo();    } catch (Exception e) {        e.printStackTrace();    }*/    //案例六    //getRequestAllInfo();    //案例七    parseURL("www.baidu.com" );    }}
原创粉丝点击