网络编程:Net基础

基本概念

  • 通信协议
  • 通信接口
  • 网络分层:TCP/IP协议

    • 网络接口层
    • 网络层
    • 传输层
    • 应用层

ip:

定位一个节点电脑等网络设备

静态方法

获取 InetAddress 对象:getLocalHost() 或 getByName()

成员方法

获取计算机IP地址和获取计算机名:getHostAddress()、getHostName()

  1. //使用getLocalHost方法创建InetAddress对象
  2. //获取本地主机的ip和主机名
  3. InetAddress addr=InetAddress.getLocalHost();//返回本地主机的ip地址
  4. System.out.println(addr.getHostAddress());
  5. System.out.println(addr.getHostName());
  6. //根据域名获得InetAddress对象
  7. addr=InetAddress.getByName("www.baidu.com");
  8. System.out.println(addr.getHostAddress());//返回百度服务器的ip地址
  9. System.out.println(addr.getHostName()); //输出:www.baidu.com
  10. System.out.println("----------------");
  11. addr=InetAddress.getByName("183.232.231.172");
  12. System.out.println(addr.getHostAddress()); //返回IP
  13. System.out.println(addr.getHostName());//输出的是IP而不是域名。1、ip不存在2、DNS服务器不允许进行IP地址和域名的映射,getHostName就会直接返回IP地址

端口:port

定位一款软件或者程序

两个字节 0-65535 UDP TCP

同一协议端口不能那冲突

定义端口越大越好

构造器:new InetSocketAddress(地址|域名,端口)

  1. public class NetPort {
  2. public static void main(String[] args) {
  3. //构建对象
  4. InetSocketAddress socketAddress=new InetSocketAddress("127.0.0.1",8080);
  5. InetSocketAddress socketAddress2=new InetSocketAddress("localhost",8000);
  6. //获取计算机名
  7. System.out.println(socketAddress.getHostName());
  8. //获取IP
  9. System.out.println(socketAddress2.getAddress());
  10. //获取端口
  11. System.out.println(socketAddress2.getPort());
  12. }
  13. }

URL:统一资源定位符(定位互联网上一个资源)

参数

1、协议

2、域名|IP

3、端口

4、请求资源

5、参数

6、锚点

基本使用

  1. public class NetURL {
  2. public static void main(String[] args) throws MalformedURLException {
  3. URL url=new URL("http://www.baidu.com:80/index.html?uname=sp&psw=by#a");
  4. //获取四个值
  5. System.out.println("协议:"+url.getProtocol()); //协议
  6. System.out.println("域名|IP:"+url.getHost()); //域名/IP
  7. System.out.println("端口:"+url.getPort()); //端口
  8. System.out.println("请求资源1:"+url.getFile()); //请求资源1
  9. System.out.println("请求资源2:"+url.getPath()); //请求资源2
  10. System.out.println("参数:"+url.getQuery()); //获取参数
  11. System.out.println("锚点:"+url.getRef()); //锚点
  12. }
  13. }

网络爬虫案例

  1. /**
  2. * 网络爬虫原理一
  3. * openStream():打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。
  4. */
  5. public class Spider_test {
  6. public static void main(String[] args) throws Exception {
  7. //获取URL
  8. URL url=new URL("https://www.jd.com");
  9. //此URL访问被拒绝
  10. //URL url=new URL("https://www.dianping.com");
  11. //下载资源
  12. InputStream is=url.openStream();
  13. BufferedReader bf=new BufferedReader(new InputStreamReader(is,"utf-8"));
  14. String msg=null;
  15. while ((msg=bf.readLine())!=null){
  16. System.out.println(msg);
  17. }
  18. bf.close();
  19. //分析
  20. //处理
  21. }
  22. }
  1. /**
  2. * 网络爬虫原理+模拟浏览器
  3. * openConnection():返回一个URLConnection实例,表示与URL引用的远程对象的URL 。
  4. *
  5. */
  6. public class Spider_test02 {
  7. public static void main(String[] args) throws Exception {
  8. //获取URL
  9. //URL url=new URL("https://www.jd.com");
  10. URL url=new URL("https://www.dianping.com");
  11. //下载资源
  12. //模拟浏览器的GET请求
  13. HttpURLConnection conn= (HttpURLConnection) url.openConnection();
  14. conn.setRequestMethod("GET");
  15. 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");
  16. BufferedReader bf=new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
  17. String msg=null;
  18. while ((msg=bf.readLine())!=null){
  19. System.out.println(msg);
  20. }
  21. bf.close();
  22. //分析
  23. //处理
  24. }
  25. }