Java 中专门提供 java.net 包,方便开发网络程序。Java 的网络编程包括了两种通信协议;【TCP(Transmission Control Protocal)】【UDP(User Datagram Prptocol)】IP地址 IP 是互联网上的每一台计算机的唯一标记; IP 可分为两类 【IPv4】 32位,分4段,每段范围 0-225 十进制表示;(1) 使用4个8位的二进制数据表示,每8位之间使用圆点隔开,每个8位整数可以转换成一个0~255的十进制整数,因此我们一般看到的IP地址类似:192.168.1.1(这4段组成的个数有限度,大概是40多亿的样子,不够用,出现Ipv6); 【IPv6】 128位,分8段,0000~FFFF的十六进制数值,冒号分割。如:1080:0:0:0:8:800:200C:417A IP地址号段分类:A类留给政府机构,B类分配给中等规模的公司,C类分配给任意需要的人,D类用于组播,E类用于实验,给类可容纳的地址数目不同Java对基本网络的支持 (1) InetAddress类要来表示IP地址,有两个子类 |-- Inet4Address(IPv4) |-- Inet6Address(IPv6) (2) 常用方法(主要了解获得IP地址对象的方法) |-- static InetAddress getLocalHost():返回本地主机; |-- static InetAddress getByName(String host) :通过主机名/域名获取IP地址。查找存在的一个IP地址,如果主机名或域名写错抛出异常; |-- static InetAddress getByAddress(byte[] addr) :根据一个IP地址获得一个IP地址对象; 注意:参数是一个byte[]数组,如果大于127的需要进行强转成byte; |-- boolean isReachable(int timeout):测试是否可以连接到该地址(类似ping) public void testIp() throws Exception { InetAddress localHost = InetAddress.getLocalHost(); System.out.println(localHost); InetAddress[] address1 = InetAddress.getAllByName("SKY-20190405AAU"); for(InetAddress address:address1) { System.out.println(address); } System.out.println(InetAddress.getByAddress(new byte[]{14,(byte)215,(byte)177,39})); System.out.println(InetAddress.getByName("www.baidu.com").getHostAddress());//180.97.33.107 System.out.println(InetAddress.getByName("www.taobao.com").getHostAddress());//118.112.14.230 System.out.println(InetAddress.getByName("www.jindong.com").getHostAddress());//61.92.24.81 System.out.println(InetAddress.getByName("www.baidu.com").isReachable(50)); }Port 端口 1. 什么是端口 (1) 如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535 (2^16-1); (2) 简单的说:一个电脑上的应用程序都绑定了一个对应的编号(端口),通过IP可以定位到指定的主机(电脑),再加上端口就可以定位到指定的程序了; 2. 端口的分类 (1) 公认端口:0~1023,他们紧密 绑定一些服务 (2) 注册端口:1024~49151,松散绑定一些服务 (3) 动态端口:49152~65535,动态使用的端口,程序一般不会使用这些端口 分类作用:现在对一些比较早的程序,它使用比较早,使用一些小的端口,被人熟知了,我们自己的开发的应用程序,尽量避免这些端口; 3. 注意: (1) 同一台机器上不能有两个程序使用同一个端口,会冲突; (2) 我们开发过程中一般选用注册端口或动态端口范围内的; (3) 以后开发中最好记住我们用到过的常用软件的端口,避免我们知己设定端口的时候和他们冲突; ① Tomcat:8080/80,Mysql:3306URL 统一资源定位符+ 1. 什么是URL (1) URL(Uniform Resource Locator)统一资源定位符 ,可以直接使用此类找到互联网上的资源如一个简单的网页。 (2) URL一般由http协议 ,资源所在主机(域名或IP) ,端口 ,资源名称 部分组成; 如:http :// itsource.cn:80 / class_info/java_jichu.html 2. URL类中的常用方法: (1) URL(String protocol, String host, int port, String file):构建一个URL对象; (2) URL(String url):构建一个URL对象; (3) InputStream openStream():返回一个用于从该连接读入的 InputStream; (4) URI toURI():返回与此URL等效的URI; (5) 更多方法请查看URL对应的API文档; 3. 通过URL读取网络文件数据体验 (1) 创建指定连接的URL对象 (2) 从URL对象上得到输入流 循环,从输入流中获得数据并打印(或者保存到本地磁盘中:相当于一个资源下载)TCP 传输控制协议 (1) 概念:Transmission Control Protocol 传输控制协议, TCP是一种 面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。 当客户和服务器彼此交互数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据; (2) 此协议中有两个类Socket 和ServerSocket ,其中有一些方法能够实现在两个不同的终端之间传输数据(客户端与服务端); UDP 用户传输协议 (1) UDP是用户数据报协议,是一个简单的面向数据报的运输层协议,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证他们能到达目的。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,并且没有超时重发机制,故而传输速度很快; (2) TCP的所有操作必须建立可靠的连接,这样会浪费很大的性能,为此UDP这种不可靠的连接出现并成为聊天工具的宠儿; (3) UDP开发中使用DatagramPacket包装一条要发送的信息,之后使用DatagramSocket完成发送操作,也能够实现在两个终端之间传输数据;TCP 和 UDP 区别 1. 基于连接与无连接; 2. 对系统资源的要求(TCP较多,UDP少); 3. UDP程序结构较简单 ; 4. 流模式与数据报模式 ; 5. TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证;