Java------网络编程----IP
概念
IP
- IP地址分类:
- IPV4:32为地址,以点分十进制表示,如192.168.0.1
- IPV6:128位(16个字节)写成8个16位的无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
- 特殊的IP:
- 127.0.0.1 本机地址
- 192.168.0.0—092.068.255.255 私有地址,属于非注册地址,专门为组织机构内部使用。
- InterAddress:多个静态方法
- getLocalhost:本机
- getByName:根据域名DNS | IP地址–>IP
- 两个成员方法
- getHostAddress:返回地址
- getHostName:返回计算机名
package com.briup.ip;
import java.net.InetAddress;
import java.util.Arrays;
/**
* IP:定位一个节点
* InterAddress:多个静态方法
* 1、getLocalhost:本机
* 2、getByName:根据域名DNS | IP地址-->IP
*
* 两个成员方法
* 1、getHostAddress:返回地址
* 2、getHostName:返回计算机名
* @author Vijay
*/
public class IPTest {
public static void main(String[] args) {
try {
InetAddress ip1 = InetAddress.getLocalHost();
System.out.println(ip1.getHostAddress());//返回地址
System.out.println(ip1.getHostName()); //返回计算机名
InetAddress ip2 = InetAddress.getByName("172.0.0.1");
System.out.println(ip2.getCanonicalHostName());
System.out.println(ip2.getHostAddress());//返回地址
System.out.println(ip2.getHostName()); //返回计算机名
System.out.println(Arrays.toString(ip2.getAddress()));
System.out.println(ip2.isReachable(1000));
} catch (Exception e) {
e.printStackTrace();
}
}
}
端口Port
- 端口是虚拟的概念,是区分软件的
- 端口(0—65535):
- 公认端口:0—1023 比如80端口分配给www,21端口分配给FTP
- 注册端口:1024—49151 分配给用户进程或程序,1521分配给Oracle,3306分配给MySQL,8080分配给tomcat
- 动态/私有端口:49152—65535
- 查看端口cmd命令:
- 所有端口:netstat -ano
- 指定端口:netstat -ano|findstr “808”
- 指定进程:tasklist|findstr “808”
- 具体程序:使用任务管理器(详细信息)查看PID
- InetSocketAddress
- 构造器
new InetSocketAddress(地址|域名,端口); - 方法
getAddress() 获取地址
getPort() 获取端口
getHostName() 获取主机名
package com.briup.ip;
import java.net.InetSocketAddress;
/**
* 端口
* 1.区分软件
* 2.2个字节 0-65535 UDP TCP
* 3.同一个协议端口不能冲突
* 4.定义端口越大越好
* InetSocketAddress
* 1、构造器
* new InetSocketAddress(地址|域名,端口);
* 2、方法
* getAddress()//获取地址
* getPort()//获取端口
* getHostName()//获取主机名
* @author Vijay
*
*/
public class PortTest {
public static void main(String[] args) {
//包含端口
InetSocketAddress is1 = new InetSocketAddress("127.0.0.1", 8080);//地址,端口
InetSocketAddress is2 = new InetSocketAddress("localhost", 9000);//域名,端口
System.out.println(is1.getHostName());//获取主机名
System.out.println(is1.getAddress());//获取地址
System.out.println(is2.getAddress());
System.out.println(is2.getPort()); //获取端口
}
}
URL
- URI两种形式:URL和URN
URI:统一资源标识符
URL:统一资源定位符
URN:统一资源名称 - URL由四部分组成
协议
存放资源的主机域名
端口号
资源文件名 - 网络三大基石:html、 http、 url
package com.briup.ip;
import java.net.URL;
/**
* URL:统一资源定位器,互联网三大基石之一(html http)区分资源
* 1、协议
* 2、域名、计算机
* 3、端口:默认80
* 4、请求资源
* http://www.baidu.com:80/index.html?uname=shsxt&age=18#a
*
* @author Vijay
*
*/
public class UrlTest {
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com:80/index.html?uname=shsxt&age=18#a");
System.out.println(url.getProtocol());//返回协议
System.out.println(url.getHost());//返回域名|ip
System.out.println(url.getPort());//返回端口
System.out.println(url.getDefaultPort());//获取与此 URL的协议的默认端口号。
System.out.println(url.getAuthority());//返回域名加端口
System.out.println(url.getContent());//获取此URL的内容
System.out.println(url.getFile());//返回请求资源 获取此 URL的文件名。
System.out.println(url.getPath());//返回请求资源URI 获取此 URL的路径部分。
//参数
System.out.println(url.getQuery());
//锚点
System.out.println(url.getRef());
}
}
网络爬虫
- 网络爬虫原理
- 给定一个URL
- 下载资源
- 分析(正则表达式)
- 处理(抽取、清洗、存储)
package com.briup.ip;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
/**
* 网络爬虫原理
* 1.给定一个URL
* 2.下载资源
* 3.分析(正则表达式)
* 4.处理(抽取、清洗、存储)
* @author Vijay
*
*/
public class SpiderTest01 {
public static void main(String[] args) throws Exception {
//获取URL
URL url = new URL("https://www.jd.com");
//下载资源
InputStream is = url.openStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
String msg = null;
while((msg =br.readLine()) != null) {
System.out.println(msg);
}
br.close();
//分析
//处理
}
}
package com.briup.ip;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* 网络爬虫原理 + 模拟浏览器
* @author Vijay
*
*/
public class SpiderTest02 {
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/77.0.3865.90 Safari/537.36");
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
String msg = null;
while((msg =br.readLine()) != null) {
System.out.println(msg);
}
br.close();
//分析
//处理
}
}