网络编程
- 什么是网络编程?
- 可以让设备中的程序与网络搜索其他设备中的程序进行数据交互(实现网络通信的)
- Java提供了哪些网络编程的解决方法?
java.net.*包下提供了网络编程的解决方法
- 基本的通信架构
- 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)
- 无论是CS架构,还是BS架构的软件必须依赖网络编程
网络通信三要素
IP地址
IP(Internet Protocol):全称”互联网协议地址“,是分配给上网设备的唯一标识
IP地址有两种形式:
- IPv4:由32bit(4字节)组成,点分十进制表示法
- IPv6:共128位,号称可以为地球每一粒沙子编号
- IPv6分成8段表示,每段每四位编码成一个十六进制位表示,数之间用(:)分开
IP域名:
- 电脑的
DNS服务器会将域名解析成IP地址,然后再使用该IP地址访问对应的服务器
- 电脑的
公网IP、内网IP
- 公网IP:是可以连接互联网的IP地址
- 内网IP:也叫局域网IP,只能组织机构内部使用
192.168.开头的就是常见的局域网地址,范围即为192.168.00--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对应的主机是否联通
端口号
- 端口:
- 标记正在计算机设备上运行的应用程序的,被规定为一个16位的二进制,范围是0~65535
- 分类:
- 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用80,FIP占用21)
- 注册端口:1024~49151,分配给用户进程或某些应用程序
- 动态端口:49151~65535,之所以成为动态端口,是因为它一般不固定分配某种进程,而是动态分配
- 注意:我们自己开发发程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口一样,否则出错
协议
通信协议:
- 网络上通信的设备,实现规定的连接规则,以及传输数据的规则被称为网络通信协议
开放式网络互联标准:OSI网络参考模型
OSI网络参考模型:全球网络互联标准
TCP/IP网络模型:事实上的国际标准

传输层的2个通信协议:
- UDP(User Datagram Protocol):用户数据报协议
- TCP(Transmission Control Protocol):传输控制协议
UDP协议
- 特点:无连接、不可靠通信
- 不事先建立连接,按照包发,一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据(限制在64KB内)等
- 发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到的数据也不返回确认,故是不可靠的。
- 通信效率搞,用于语音通话,视频直播
TCP协议
- 特点:面向连接、可靠通信
- TCP的最终目的:要保证在不可靠的信道上实现可靠的传输
- TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接
- 通信效率相对不高,用于网页、文件下载、支付
TCP协议:三次握手建立可靠连接
- 可靠连接:确定通信双方,收发消息都是正常无问题的!(全双工)
TCP协议:四次挥手断开连接
- 目的:确保双方数据的收发都已完成
UDP通信
特点:无连接、不可靠通信
不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了。
Java提供了一个
java.net.DatagramSocket类来实现UDP通信DatagramSocket:用于创建客户端、服务端
构造方法 说明 public DatagramSocket()创建客户端的Socket对象,系统会随机分配一个端口号 public DatagramSocket(int port)创建服务端的Socket对象,并指定端口号 方法名称 说明 public void send(DatagramPacket dp)发送数据包 public void receive(DatagramPacket p)使用数据包接收数据 DatagramPacket:创建数据包
构造方法 说明 public DatagramPacket(byte[] buf, int length, InetAddress addresss, int port)创建发出去的数据包对象 public DatagramPacket(byte[] buf, int length)创建用来接收数据的数据包 方法名称 说明 public int getLength()获取数据包,实际接收到的字节个数 客户端实现步骤:
- 创建DatagramSocket对象(客户端对象)
- 创建DatagramPacket对象封装需要发送的数据(数据包对象)
- 使用DatagramSocket对象的send方法,传入DatagramPacket对象
- 释放资源
服务端实现步骤:
- 创建DatagramSocket对象并指定端口(服务端对象)
- 创建DatagramPacket对象接收对象(数据包对象)
- 使用DatagramSocket对象的receive方法,传入DatagramPacket对象
- 释放资源
TCP通信
特点:面向连接、可靠通信
通信双方事先会采用“三次握手”方式建立可靠联系,实现端到端通信,底层能保证数据成功成功传给服务段
Java提供了一个
java.net.Socket类来实现TCP通信TCP通信-客户端开发
客户端程序就是通过
java.net包下的Socket类来实现构造方法 说明 public Socket(String host, int port)根据指定的服务端ip、端口号请求与服务端建立连接,连接通过,就获得客户端socket 方法名称 说明 public OutputStream getOutputStream()获得字节输出流 public InputStream getInputStream()获得字节输入流
TCP通信-服务端开发
服务端就是通过
java.net包下的ServerSocket类来实现的构造方法 说明 public ServerSocket(int port)为服务端程序注册端口 方法名称 说明 public Socket accept()阻塞等待用户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象