Java知识点复习系列(2)
来源:互联网 发布:宋代权知开封府事 编辑:程序博客网 时间:2024/06/06 07:42
前言
这里记录今天对Java网络操作的一些案例的笔记,每次复习觉得自己对这个知识点理解越深 , 其实我们一定要理解这个知识点可以做什么事情.
总结归类
- 获取指定主机的IP地址
- 查看端口是否被占用
- 获取本机的IP和名称
- 获取远程文件的大小
- 获取网站响应头的信息
- 获取返回数据包中的所有信息
- 综合项目
要求:
写一个方法, 要求可以获取任何指定网站的响应头数据包信息.
和这个网站的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" ); }}
阅读全文
0 0
- Java知识点复习系列(2)
- Java知识点复习系列(0)
- Java知识点复习系列(1)
- Java知识点复习系列(3)
- Java知识点复习系列(4)
- Java知识点复习系列(5)
- java复习知识点2
- java知识点复习
- java 基础复习 --小知识点
- 复习Java的几个知识点
- Java 对象特性知识点复习
- Java基础复习,整理知识点
- Java知识点复习3---字符串
- 一周JAVA知识点总结复习
- 复习一:java基础知识点
- Java期末考试复习知识点总结
- 复习二:java基础知识点
- 复习三:java基础知识点
- c++多个源文件共用一个全局变量(extern 的用法)
- 叼叼叼,js黑语言
- eclipse 生成UML
- Codeforces Beta Round #25 (Div. 2 Only)
- css3动画停留在最后一帧
- Java知识点复习系列(2)
- 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
- java tf-idf提取关键字
- 2017.12.07 进程间的通信方式
- 7-50 装箱问题(20 分)
- JAVA 代码块 继承
- tcp/ip学习笔记--第29章 NFS network file system
- JAVA 代码块 继承 final
- node,起航