网络编程概述
- 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。
Java提供了哪些网络编程的解决方案
- java.net.*包下提供了网络编程的解决方案
基本的通信架构
- 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。
无论是CS架构,还是BS架构的软件都必须依赖网络编程
网络通信三要素
IP地址
- IP(internet Protocol):全称当“互联网协议地址”,设备在网络中的地址,是唯一的标识
- IP地址有两种形式:IPv4、IPv6
IPv4
IPv6
- IPv6:共128位
- IPv6分成8段表示。每段每4位编码成一个十六进制位表示,数之间用冒号(:)分开。
公网IP,内网IP
- 公网IP:就是可以连接互联网的IP地址;内外IP:也叫局域网IP,只能组织机构内部使用。
- 192.168.开头的就是常见的局域网地址,范围即为192.168.0.0~192.168.255.255,专门位组织机构内部使用。
特殊IP地址
- 127.0.0.1、localhost:代表本机IP,只会寻找当前所在的主机。
IP常用命令:
- ipconfig:查看本机IP地址。
- ping IP地址:检查网络是否连通。
InetAddress
- 代表IP地址
InetAddress的常用方法
名称 | 说明 |
---|---|
public static InetAddress getLocalhost() | 获取本机IP,会以一个inetAddress的对象返回 |
public static InetAddress getByName(String host) | 根据IP地址或者域名,返回一个inetAddress对象 |
public String getHostName() | 获取该IP地址对象对应的主机名 |
public String getHostAddress() | 获取该IP地址对象中的IP地址信息 |
public boolean isReachable(int timeout) | 在指定毫秒内,判断主机与该IP对应的主机是否能连通 |
import java.net.InetAddress;
public class InetAddressTest {
public static void main(String[] args) throws Exception {
// 获取本机IP地址对象
InetAddress ip1 = InetAddress.getLocalHost();
System.out.println(ip1.getHostName());
System.out.println(ip1.getHostAddress());
// 获取指定IP或域名的IP地址对象
InetAddress ip2 = InetAddress.getByName("www.baidu.com");
System.out.println(ip2.getHostName());
System.out.println(ip2.getHostAddress());
// 相当于ping
System.out.println(ip2.isReachable(6000));
}
}
端口号
- 应用程序在设备中唯一的标识,标记正在计算机设备上运行的应用程序的,被规定为一个16位的二进制,范围是0~65535。
分类
- 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用80,FTP占用21)
- 注册端口:1024~59151,分配给用户进程或某些应用程序。
- 动态端口:49152~65535,之所以称为动态端口,是因为它一般不固定分配某种进程,二十动态分配。
注意:我们自己开发的程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口一样,否则出错。
协议
- 网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议。
开发式网络互联标准:OSI网络参考模型
- OSI网络参考模型:全球网络互联标准。
- TCP/IP网络模型:事实上的国际标准。
OSI网络参考模型 | TCP/IP | 各层对应 | 面向操作 |
---|---|---|---|
应用层 | 应用层 | HTTP、FTP、SMTP…… | 应用程序需要关注的:浏览器,邮箱。程序员一般在这一层开发 |
表示层 | |||
会话层 | |||
传输层 | 传输层 | UDP、TCP…… | 选择使用的TCP,UDP协议 |
网络层 | 网络层 | IP…… | 封装源和目标IP |
数据链路层 | 数据链路层+物理 | 比特流…… | 物理设备中传输 |
物理层 |
传输层的2个通信协议
- UDP(User Datagram Protocol):用户数据报协议;
- TCP(Transmission Control Protocol):传输控制协议。
UDP协议
- 特点:无连接,不可靠通信。通信效率高
- 不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口,目的地址、程序端口和数据(限制在64KB内)等。
- 发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到数据也不返回确认,故是不可靠的。
TCP协议
- 特点:面向连接、可靠通信。通信效率相对不高
- TCP的最终目的:要保证在不可靠的信道上实现可靠的传输。
- TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接。
TCP协议:三次握手建立可靠连接
可靠连接:确认通信双方,收发消息都是正常无问题的(全双工)
TCP协议:四次握手断开连接
目的:确保双方数据的收发都已经完成