针对网络通信的不同层次,Java提供的网络功能有四大类
InetAddress:用于标识网络上的硬件资源。(说白了就是IP地址的相关信息)
URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
Sockets:使用TCP协议实现网络通信的Socket相关的类
Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信。(通过在网络中发送数据报进而实现网络的通信)
InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)协议。
1 package zhang; 2 3 4 5 import java.io.BufferedReader; 6 7 import java.io.IOException; 8 9 import java.io.InputStream; 10 11 import java.io.InputStreamReader; 12 13 import java.net.InetAddress; 14 15 import java.net.MalformedURLException; 16 17 import java.net.URL; 18 19 import java.net.UnknownHostException; 20 21 import java.util.Arrays; 22 23 24 25 /** 26 27 * InetAddress类*/ 28 29 30 31 public class Main { 32 33 public static void main(String [] args) throws UnknownHostException { 34 35 // TODO Auto-generated constructor stub 36 37 //获取本机的IP地址 38 39 InetAddress address=InetAddress.getLocalHost(); 40 41 System.out.println("计算机名:"+address.getHostName()); 42 43 System.out.println("IP地址:"+address.getHostAddress()); 44 45 byte [] bytes=address.getAddress(); 46 47 System.out.println("字节数组形式的IP"+Arrays.toString(bytes)); 48 49 System.out.println(address);//直接输出InetAddress对象 50 51 //根据主机名获取InetAddress实例 52 53 InetAddress address2=InetAddress.getByName("www.baidu.com"); 54 55 System.out.println(address2); 56 57 //(URL) Uniform(统一的) Resource(资源) Locator(定位符,探测器) 58 59 //表示Internet上某一资源的地址 60 61 /** 62 63 * URL由两部分组成:协议名称和资源名称,中间用冒号隔开。http://www.baidu.com 64 65 * 66 67 * */ 68 69 //创建URL的实例 70 71 try { 72 73 URL imooc=new URL("http://www.imooc.com"); 74 75 //根据已有的URL创建新的URL 76 77 //?后面的是传递的参数其中#后面的是锚点 78 79 URL url=new URL(imooc,"/index.html?username=tom#test"); 80 81 System.out.println("协议:"+url.getProtocol());//获取协议信息 82 83 System.out.println("主机:"+url.getHost());//主机信息 84 85 //如果未指定端口号则根据协议的不同使用默认的端口号 http使用的是80端口 86 87 //getPort返回值为-1 88 89 System.out.println("端口:"+url.getPort());//获取端口号 90 91 /** 92 93 * 协议:http 94 95 * 主机:www.imooc.com 96 97 * 端口:-1 98 99 * */ 100 101 System.out.println("文件路径:"+url.getPath()); 102 103 System.out.println("文件名:"+url.getFile()); 104 105 System.out.println("相对路径"+url.getRef()); 106 107 System.out.println("查询字符串"+url.getQuery()); 108 109 /** 110 111 * 文件路径:/index.html 112 113 * 文件名:/index.html?username=tom 114 115 * 相对路径test 116 117 * 查询字符串username=tom 118 119 * */ 120 121 } catch (MalformedURLException e) { 122 123 // TODO Auto-generated catch block 124 125 e.printStackTrace(); 126 127 } 128 129 /** 130 131 * 使用URL读取网页内容 132 133 * 1.通过URL对象的openStream()方法可以得到指定资源的输入流 134 135 * 2.通过输入流可以读取、访问网络上的资源 136 137 * */ 138 139 //创建URL实例 140 141 try { 142 143 URL url2=new URL("http://www.baidu.com"); 144 145 146 147 InputStream is=url2.openStream(); 148 149 //将字节输入流转换成字符输入流 150 151 InputStreamReader isr=new InputStreamReader(is,"utf-8"); 152 153 //为字符输入流添加缓冲,提高效率 154 155 BufferedReader bis=new BufferedReader(isr); 156 157 String data=bis.readLine();//读取数据 158 159 160 161 while(data!=null){//循环读取数据 162 163 System.out.print(data);//输出数据 164 165 data=bis.readLine(); 166 167 }//读取到的是百度首页的源代码 168 169 } catch (MalformedURLException e) { 170 171 // TODO Auto-generated catch block 172 173 e.printStackTrace(); 174 175 } catch (IOException e) { 176 177 // TODO Auto-generated catch block 178 179 e.printStackTrace(); 180 181 } 182 183 } 184 185 }
时间: 2024-10-25 05:35:00