[19/04/14-星期日] 网络编程_java.net包(InetAddress类、InetSocketAddress类、URL类)

一、概念

   Java为了可移植性,不允许直接调用操作系统,而是由java.net包来提供网络功能。Java虚拟机负责提供与操作系统的实际连接。

InetAddress

   作用:封装计算机的IP地址和DNS(没有端口信息)。

                注:DNS是Domain Name System,域名系统。

   特点:这个类没有构造方法。如果要得到对象,只能通过静态方法:getLocalHost()、getByName()、 getAllByName()、 getAddress()、getHostName()。

InetSocketAddress

   作用:包含IP和端口信息,常用于Socket通信。此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。

/***
 * IP:定位一个节点(计算机】路由器) 区分小区,定位主机
 * 端口(2个字节,16位,0-65535):区分房间,定位具体软件 如: 8080:Tomcat服务器 ,1521:Oracle服务器,3306:mysql服务器
 * 查看所有端口:netstat -ano ;查看指定端口:netstat -ano|findstr "8080" ;查看指定进程:talklist|findstr "3272"
 * (8080为某个具体端口的名字,3272为某个具体进程的名字)
 * 
 */
package cn.sxt.net;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class Test_0413_Net {
    public static void main(String[] args) throws UnknownHostException {
        //通过getLocalHost()方法创建InetAddress对象,操作本机信息
        InetAddress addr = InetAddress.getLocalHost();// host:主机,主人
        System.out.println(addr.getHostAddress());//获取本机IP
        System.out.println(addr.getHostName());//获得本机名字    
        
        //根据域名获得计算机节点信息
        InetAddress addr2 = InetAddress.getByName("www.baidu.com");
        System.out.println(addr2.getHostAddress());  // 返回百度服务器的IP:220.181.112.244
        System.out.println(addr2.getHostName());//返回百度的服务器的名字:www.baidu.com
        
        //根据IP获得计算机节点信息
        InetAddress addr3 = InetAddress.getByName("59.110.14.7"); 
        System.out.println(addr3.getHostAddress()); // 返回sxt服务器的IP:59.110.14.7
        System.out.println(addr3.getHostName());//输出ip而不是域名。如果这个IP地址不存在或DNS服务器不允许进行IP地址
                     //和域名的映射,getHostName方法就直接返回这个IP地址。
        
        
        //套接字,端口
        
        InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);//地址,端口号
        InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 9000);//域名,端口号,localhost 本机域名
        System.out.println(socketAddress.getAddress());
        System.out.println(socketAddress.getHostName());
        System.out.println(socketAddress.getPort());//获得端口号
        
        System.out.println(socketAddress2.getAddress());
    }

}

 

URL类

/*** 网络3大基石:html、 url、 http
 * URD:统一资源名称  如:磁力链接
 * URL:统一资源定位符 http://www.baidu.com:80/index.html
 *   包含:协议,域名/计算机,端口(默认80),请求资源
 */
package cn.sxt.net;

import java.net.MalformedURLException;
import java.net.URL;

public class Test_0414_URL {
    public static void main(String[] args) throws MalformedURLException {
        URL u = new URL("http://www.google.cn:80/index.html?uname=shsxt&age=18#a");//"?" 参数 标志 , "#" 锚点标志
        System.out.println("协议:" + u.getProtocol());//协议:http ,Protocol:协议,草案
        System.out.println("主机名:" + u.getHost()); //域名: www.google.cn
        System.out.println("端口:" + u.getPort()); //端口号:80
        System.out.println("请求资源:" + u.getFile()); // 端口号后面,锚点前的所有内容:index.html?uname=shsxt&age=18
        System.out.println("路径:" + u.getPath()); // 端口号后面,参数前的所有内容  index.html
        
        System.out.println("参数部分:" + u.getQuery());//参数内容:  uname=shsxt&age=18  Query:查询,询问
        System.out.println("锚点部分:" + u.getRef());//锚点内容:  a
        
        System.out.println("获取与此url关联的协议的默认端口:" + u.getDefaultPort());
        


        URL u1 = new URL("http://www.abc.com/aa/");
        URL u2 = new URL(u, "2.html"); // 相对路径构建url对象
        System.out.println(u2.toString()); // http://www.abc.com/aa/2.html


    }

}
/***
 * 模拟网络爬虫 模拟浏览器
 */
package cn.sxt.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

 
public class Test_0414_Spider {
    public static void main(String[] args) throws Exception {
        //获取url
        //URL url=new URL("https://www.jd.com");
        
        URL url=new URL("https://www.dianping.com");
        HttpURLConnection con=(HttpURLConnection)url.openConnection();//应对网站的反爬的办法
        con.setRequestMethod("GET");//从服务器请求数据 ,模拟浏览器的get请求
        con.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
        
        
        //下载资源
        //InputStream iStream=url.openStream();
        BufferedReader bReader=new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
        String msg=null;
        while ((msg=bReader.readLine())!=null) {
            System.out.println(msg);
            
        }
        bReader.close();
        //分析
        
        
    }

}

 

转载于:https://www.cnblogs.com/ID-qingxin/p/10687026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值