网络编程
java.net
包下 API 。
IP 对象
-
Java 中,使用
InetAddress
类对 IP ( Internet Protocol )地址进行描述,它的常用方法如下:方法 说明 static InetAddress getByName(String host) 由主机名得到它的IP地址包装对象(主机名可以是机器名称,也可以是IP地址) String getHostName() 返回主机名 String getHostAddress() 返回文本形式的IP地址字符串
UDP
-
UDP 概述:
-
全称 User Datagram Protocol ,即用户数据报协议。
-
它是无连接通信协议,即,在数据传输时,数据的发送端和接收端不建立逻辑连接。
简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
-
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输,即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
-
但由于 UDP 的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用 UDP 协议。
-
-
Java 提供
DatagramPacket
类来封装 UDP 协议数据包:-
常用构造方法:
构造方法 说明 DatagramPacket(byte[] buf,int len,InetAddress add,int port) 构造一个数据报包对象,用来发送长度为 len 的数据包到指定主机的指定端口上 DatagramPacket(byte[] buf, int len) 构造一个数据报包对象,用来接收长度为 len 的数据包 -
常用方法:
方法 说明 byte[] getData() 返回数据缓冲区(缓冲区没满则会补 0) int getLength() 返回发送或接收的数据的实际长度
-
-
Java 提供
DatagramSocket
类来封装 UDP 协议数据套接字:-
常用构造方法:
构造方法 说明 DatagramSocket() 构造一个数据报套接字对象,并将其绑定到本机所有可用的端口 -
常用方法:
方法 说明 void send(DatagramPacket p) 从此套接字发送一个数据报包 void receive(DatagramPacket p) 从此套接字接受一个数据报包 void close() 关闭此数据报套接字
-
-
基本步骤:
- 发送数据:
- 创建发送端的 Socket 对象:
DatagramSocket ds = new DatagramSocket()
; - 创建数据,并把数据打包:
DatagramPacket dp = new DatagramPacket(...)
; - 调用发送端的 Socket 对象的方法发送数据:
ds.send(dp)
; - 关闭发送端:
ds.close()
。
- 创建发送端的 Socket 对象:
- 接收数据:
- 创建接收端的 Socket 对象:
DatagramSocket ds = new DatagramSocket()
; - 创建一个数据包,用于接收数据:
DatagramPacket dp = new DatagramPacket(...)
; - 调用接收端的 Socket 对象的方法接收数据:
ds.receive(dp)
; - 解析数据包:
dp.getData()
、dp.getLength()
; - 关闭接收端:
ds.close()
。
- 创建接收端的 Socket 对象:
- 发送数据:
TCP
-
TCP 概述:
-
全称 Transmission Control Protocol ,即传输控制协议。
-
它是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
-
在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
TCP 协议中,在发送数据的准备阶段,客户端与服务器之间进行三次交互,以保证连接的可靠:
- 第一次握手:客户端向服务器端发出连接请求,等待服务器确认;
- 第二次握手:服务器端向客户端回送一个响应,通知客户端收到了连接请求;
- 第三次握手:客户端再次向服务器端发送确认信息,确认连接。
-
-
Java对基于 TCP 协议的网络传输提供了良好的封装,使用 Socket 对象来代表两端的通信端口,并通过 Socket 产生 IO 流来进行网络通信:
-
Java为客户端提供了
Socket
类,为服务器端提供了ServerSocket
类来封装 TCP 协议的套接字:-
客户端:
构造方法 说明 Socket(InetAddress address,int port) 创建流套接字并将其连接到指定 IP 指定端口号 Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号 常用方法 说明 InputStream getInputStream() 返回此套接字的输入流 OutputStream getOutputStream() 返回此套接字的输出流 -
服务器端:
构造方法 说明 ServerSocket(int port) 创建绑定指定端口的服务器套接字对象 常用方法 说明 Socket accept() 监听要连接到此的套接字,监听到时就接受它,返回服务器与它连接的套接字对象
-