文章目录
基本概念
1.计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
2.网络编程:
网络编程可以让程序与网络上的其他设备中的程序进行数据交互
(即在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换。)
3.网络通信的两种模式
常见的通信模式有2种形式:Client-Server(CS) 、 Browser/Server(BS)
客户端—服务器:
浏览器—服务器:
网络编程三要素
两个问题:
和谁通信?——IP地址,端口
如何通信?——遵循一定规则:协议
所以 三要素为IP地址,端口,协议
1.IP地址
IP(Internet Protocol):全称”互联网协议地址”,是分配给上网设备的唯一标志
IP地址分为两大类
- IPv4:IPv4是一个32位的二进制数,表示成4个十进制数,各取0-255的值,如192.168.1.2(即点分十进制)
- IPv6:为了扩大地址空间,通过IPv6重新定义地址扯空间,采用128位地址长度,每16个字节一组,分成8组十六进制数
常用命令:
ipconfig: 查看本机IP地址
ping IP地址:检测网络是否连通
InetAddress
类:
java提供的一个类,可以方便对IP地址进行获取和操作
方法 | 含义 |
---|---|
static InetAddress getByName(String host) | 确定主机名称的IP地址,主机名可以是机器名称,也可以是IP地址 |
String getHostName( ) | 获取此IP地址的主机名 |
String getHostAddress( ) | 返回文本显示中的IP地址字符串 |
2.端口
(如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识)
端口号:标识正在计算机设备上运行的进程(程序),被规定为一个 16 位的二进制,范围是 0~65535。
端口类型:
- 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用 80,FTP占用21)
- 注册端口:1024~49151,分配给用户进程或某些应用程序。(如:Tomcat占 用8080,MySQL占用3306)
- 动态端口:49152到65535,之所以称为动态端口,是因为它 一般不固定分配某种进程,而是动态分配
一个设备中不能出现两个相同的端口!
3.协议
协议:计算机网络中,连接和通信的规则被称为网络通信协议
常见的协议有UDP协议和TCP协议
TCP协议:
- 使用TCP协议,必须双方先建立连接,它是一种面向连接的可靠通信协议。
- 传输前,采用“三次握手”方式建立连接,所以是可靠的 。
- 在连接中可进行大数据量的传输 。
- 连接、发送数据都需要确认,且传输完毕后,还需释放已建立的连接(四次挥手),通信效率较低。
- 应用场景:文件传输
UDP协议:
- UDP是一种无连接、不可靠传输的协议。
- 将数据源IP、目的地IP和端口封装成数据包,不需要建立连接
- 每个数据包的大小限制在64KB内
- 发送不管对方是否准备好,接收方收到也不确认,故是不可靠的
- 可以广播发送 ,发送数据结束时无需释放资源,开销小,速度快。
- 应用场景:语音通话
UDP通信程序
1.原理
UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
Java提供了DatagramSocket类作为基于UDP协议的Socket
2.方法
DatagramPacket:数据包对象
构造器 | 含义 |
---|---|
DatagcamPacket(byte[] buf, int length,InetAddnes.s.address,int port) | 创建发送端数据包对象;buf:要发送的内容,字节数组;length:要发送内容的字节长度;address:接收端的IP地址对象;port:接收端的端口号创建接收端的数据包对象 |
DatagramPacket( byte[] buf,int length) | buf:用来存储接收的内容length:能够接收内容的长度 |
DatagramSocket:发送端和接收端对象
构造器和成员方法:
方法 | 含义 |
---|---|
DatagramSosket( ) | 创建发送端的Socket对象,系统会随机分配一个端口号 |
DatagnamSocket(int port) | 创建接收端的Socket对象并指定端口号 |
void receive(DatagcamPacket p) | 接收数据包 |
void send(DatagramPacket dp) | 发送数据包 |
3.UDP通信步骤
发送数据:
- 创建DatagramSocket对象(发送端对象)
- 创建DatagramPacket对象封装需要发送的数据(数据包对象)
- 使用DatagramSocket对象的send方法传入DatagramPacket对象
- 释放资源
接收数据:
- 创建DatagramSocket对象并指定端口(接收端对象)
- 创建DatagramPacket对象接收数据(数据包对象)
- 使用DatagramSocket对象的receive方法传入DatagramPacket对象
- 释放资源
TCP通信程序
1. 原理
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,—旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
2.方法
客户端Socket类
构造器和成员方法:
方法 | 含义 |
---|---|
Socket(String host , int port) | 创建发送端的Socket对象与服务端连接,参数为服务端程序的ip和端口 |
OutputStream getOutputStream() | 获得字节输出流对象 |
InputStream getInputStream() | 获得字节输入流对象 |
服务端ServerSocket类
构造器和成员方法:
方法 | 含义 |
---|---|
SeruerSocket(int port) | 注册服务端端口 |
Socket accept() | 连接成功返回Socket对象与客户端建立端到端通信 |
3.TCP通信步骤
客户端发送数据:
- 创建客户端的Socket对象 :
Socket(String host, int port)
- 获取输出流,写数据——
outputStreamgetOutputStream)
- 释放资源——
void close()
服务器接收数据:
-
创建服务器端的Socket对象:
ServerSocket(int port)
-
监听客户端连接,返回一个Socket对象:
Socket accept()
-
获取输入流,读数据,并把数据显示在控制台:
lnputStream getInputStream()
-
释放资源:
void close()