网络编程(java.net)
通信协议
计算机网路中实现通信必须有一定的约定即网络协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
通信接口
为了使两个节点之间能进行对话,必须在它们之间建立通信工具(接口),是彼此之间能进行信息交换,包括软件装置(实现节点之间的信息传送)、硬件装置(规定双方通信的约定协议)。
网络分层
数据封装
数据拆封
IP地址(InetAddress)
用来标识一个通信实体的地址通信实体可以是计算机、路由器等。比如互联网每个IP地址都要有自己的IP地址,而每个局域网的计算机要通信也要配置IP地址。路由器是连接两个或多个的通信设备。
public class test01 {
public static void main(String[] args) throws UnknownHostException{
//使用getLocalHost创建InetAddress对象 本机
InetAddress address=InetAddress.getLocalHost();
System.out.println(address.getHostAddress());//返回IP地址
System.out.println(address.getHostName());//返回计算机名
//使用域名得到InetAddress对象
address=InetAddress.getByName("www.163.com");
System.out.println(address.getHostAddress());//返回服务器IP地址123.56.138.186
System.out.println(address.getHostName());//返回
//根据IP地址得到InetAddress对象
address=InetAddress.getByName("221.233.240.30");
System.out.println(address.getHostName());
//输出的是IP不是域名。IP地址不存在或DNS服务器不允许IP地址和域名相互映射
}
}
端口(0-65535)
InetSocketAddress
/**
* 端口
* 1.区分软件
* 2.2个字节,0-65535 UDP/TCP
* 3.同一个协议端口不能冲突
* 4.定义端口越打越好
* 5.构造器new InetSocketAddress("域名|地址",端口号);
* 6.方法:getAddress();getPort();getHostName()
* @author HUANGYAOHUI
*/
public class test02 {
public static void main(String[] args) {
//端口
InetSocketAddress socketAddress=new InetSocketAddress("127.0.0.1",8080);
InetSocketAddress socketAddress2=new InetSocketAddress("localhost",9000);
System.out.println(socketAddress.getHostName());
System.out.println(socketAddress2.getAddress());
System.out.println(socketAddress.getPort());
}
}
URL基本信息
/**
* URL基本用法
* 互联网三大基石(URL、HTTP、HTML)
* 组成:协议+域名|计算机+端口(默认80)+请求资源
* @author HUANGYAOHUI
*/
public class test03 {
public static void main(String[] args) throws MalformedURLException {
URL url=new URL("http://www.baidu.com:80/index.html?username=huang&age=20#a");
System.out.println("协议:"+url.getProtocol());
System.out.println("域名|IP:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("请求资源1:"+url.getFile());
System.out.println("请求资源2:"+url.getPath());
System.out.println("参数:"+url.getQuery());
System.out.println("锚点:"+url.getRef());
}
}
爬虫基本原理
/**
* 网络爬虫原理
* 1.获取URL
* 2.下载资源
* 3.分析
* 4.处理
* @author HUANGYAOHUI
*
*/
public class test04 {
public static void main(String[] args) throws Exception {
//获取URL
URL url=new URL("https://www.jd.com");
//下载资源,建立流
InputStream is=url.openStream();
BufferedReader bf=new BufferedReader(new InputStreamReader(is,"UTF-8"));
File file=new File("jd.txt");
BufferedWriter bw=new BufferedWriter(new FileWriter(file));
String mag=null;
while(null!=(mag=bf.readLine())) {
bw.write(mag);
bw.newLine();
}
bf.close();
bw.close();
}
}
遇到不能直接访问的网页要模拟浏览器访问来爬取
/**
* 网络爬虫原理+模拟浏览器
* @author HUANGYAOHUI
*
*/
public class test04 {
public static void main(String[] args) throws Exception {
//获取URL
URL url=new URL("https://www.dianping.com");
//下载资源
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363");
BufferedReader bf=new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
File file=new File("dianping.txt");
BufferedWriter bw=new BufferedWriter(new FileWriter(file));
String mag=null;
while(null!=(mag=bf.readLine())) {
bw.write(mag);
bw.newLine();
}
bf.close();
bw.close();
}
}