Java——网络编程

Java——网络编程

网络编程的三个重要概念

  • IP(Internet Protocol),英特网互联协议,每个网络节点都可以用IP地址唯一确定。
  • port,端口,在每个网络节点上区分不同软件。
  • URL(United Resource Locator),统一资源定位符,确定放置在Internet上的每个资源的位置。

网络通信协议是计算机网络中连接和通信的规则。目前应用最广泛的有TCP/IP(Transmission Control Protocol/Internet Protocol)协议,以及UDP(User Datagram Protocol)协议。

TCP/IP网络模型

采用分层的设计方法,简化为四层:

①数据链路层,比如驱动程序、接口等,也叫网络接口层。用于定义物理传输通道,通常是对某些网络连接设备的驱动协议。

②网络层,比如IP、ICMP、IGMP。这一层是核心,用于将传输的数据分组,将分组数据发送至目标计算机或网络。

③传输层,如TCP、UDP。使网络程序进行通信。

④应用层,如HTTP、FTP、DNS。主要为互联网中的各种网络应用提供服务。

IP地址

目前应用广泛的还是IPv4,用4个字节大小的二进制表示,转为十进制例如10.0.0.1。IPv6的出现是为了扩大需求。IP地址由两部分组成:网络,主机。分成5类:

  • A类地址:由第一段网络地址和其余三段的主机地址表示。范围是1.0.0.0到127.255.255.255。包含私有地址和保留地址。

  • B类地址:由前两段网络地址和后两段的主机地址表示。范围是128.0.0.0到191.255.255.255。包含私有地址和保留地址。

  • C类地址:由前三段网络地址和剩余一段的主机地址表示。范围是192.0.0.0到223.255.255.255。包含私有地址。

  • D类地址的范围:224.0.0.1到239.255.255.254

  • E类地址范围:240.0.0.1到255.255.255.254

    供组织内部使用的非注册IP范围: 192.168.0.0 到 192.168.255.255127.0.0.1

    本机IP用127.0.0.1表示


Java中为网络提供的类

​ Java中提供了一个与IP地址有关的InetAddress类。

public class Demo2 {
	public static void main(String[] args) throws IOException {
		// 获取本地主机InetAddress对象
		InetAddress localAddress = InetAddress.getLocalHost();
		// 获取主机名为“www.baidu.cn”的InetAddress对象
		InetAddress remoteAddress = InetAddress.getByName("www.baidu.com");
		
		System.out.println("本机的IP地址" + localAddress.getHostAddress());
		System.out.println("百度的IP地址" + remoteAddress.getHostAddress());
		System.out.println("三秒钟内是否可以访问" + remoteAddress.isReachable(3000));
		System.out.println("百度的主机名为" + remoteAddress.getHostName());
	}
}
//运行结果:
本机的IP地址192.168.100.1
百度的IP地址180.101.49.11
三秒钟内是否可以访问true
百度的主机名为www.baidu.com

​ Java中还提供了一个InetSocketAddress类,实现了获取IP+端口的网络对象。

public class Demo3 {
	public static void main(String[] args) {
		//创建指定地址加端口号的套接字
		InetSocketAddress i = new InetSocketAddress("www.baidu.com",80);
		System.out.println(i);
		
		System.out.println("套接字地址的IP为:"+i.getHostName());
		System.out.println("套接字地址的端口为:"+i.getPort());
	}
}
//运行结果:
www.baidu.com/180.101.49.12:80
套接字地址的IP为:www.baidu.com
套接字地址的端口为:80

​ 用URL类可以获得代表制定资源的对象。

public class Demo4 {
	public static void main(String[] args) throws MalformedURLException {
		//参数需要协议+IP+端口(可默认缺省)+资源路径和名称
		URL url = new URL("https://blog.csdn.net:80/candycrush_CL/article/details/107325200");
		//打印
		System.out.println(url);
		System.out.println("协议:"+url.getProtocol());
		System.out.println("域名:"+url.getHost());
		System.out.println("端口:"+url.getPort());
		System.out.println("资源:"+url.getFile()); 
		System.out.println("文件:"+url.getPath());   
	}
}
//运行结果:
https://blog.csdn.net:80/candycrush_CL/article/details/107325200
协议:https
域名:blog.csdn.net
端口:80
资源:/candycrush_CL/article/details/107325200
文件:/candycrush_CL/article/details/107325200

简单的爬虫

/**
 *	网络爬虫取链接
 */
public class Test1 {
	public static String getUrlContent(String url) {
		StringBuilder sb=new StringBuilder();
		BufferedReader br = null;
		try {
			URL u=new URL(url);
			br=new BufferedReader(new InputStreamReader(u.openStream()));
			String tmp=null;
			while((tmp=br.readLine())!=null) {
				sb.append(tmp);
				sb.append("\n");
			}	
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return sb.toString();
	}
	
	public static void main(String[] args) {
		String str = getUrlContent("https://www.163.com");
		
		//Pattern p=Pattern.compile("<a[\\s\\S]+?</a>");
		Pattern p=Pattern.compile("(href=\\s*)(\\\"http[\\s\\S]+?\\\")");
		Matcher m=p.matcher(str);
		while(m.find()) {
			System.out.println(m.group(2));
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值