Java 对网络编程提供了支持,在网络编程中使用最多的就是 Socket 编程。两台计算机想要进行网络通信,必须满足一定的规范:
- 两台计算机需要有一个唯一的标识(ip 地址)。
IP 地址 为实现网络中不同计算机之间的通讯,每台计算机必须都有一个唯一的标示符。 - 两台计算机需要有共同的而语言(协议)。
协议:定义的一种规范,如 TCP 协议:是一种面向连接的可靠地给予字节流的传输层通信协议。 - 需要有相应的端口号。
端口号:一台主机上运行多个应用程序,通过端口号可以辨别不同应用程序之间的通讯。端口号的范围 0~ 65535,其中 0~1023 位系统保留
其中 IP 地址和端口号组成了所谓的 Socket。
Socket 通常称为“套接字”,用于描述 ip 地址和端口,是一个通信的基础。实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
应用程序通常通过 socket 向网络发出请求或者应答网络请求,socket 和 serversocket 类位于 Java.net 包中,在连接成功是,应用程序两端都会产生一个 socket 实例,操作这个实例,完成所需的会话。
- C-S 客户端与服务端通信
服务端 | - | 客户端 |
---|---|---|
创建监听服务 | - | - |
↓ | - | - |
等待连接 | ←建立连接← | 连接服务器 |
↓ | - | - |
通过输入输出流进行通讯 | →进行通讯→ | 通过输入输出流进行通讯 |
↓ | - | ↓ |
关闭连接 | - | 关闭连接 |
- B-S 浏览器与服务端通信
ServerSocket 类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。
## 客户端实现步骤 1. 创建服务端 ServerSocket 和客户端 Socket
new Socket(...);
2. 创建连接,获取输入/输出流。
socket.getInputStream();
socket.getOutputStream();
3. 按照协议进行读写操作
4. 关闭连接
`shutdown` 和 `close`
服务端实现通信步骤:
- 创建 ServerSocket 对象,绑定监听端口。
- 通过 accept()方法监听客户端请求
- 连接建立后,通过输入流读取客户端发送的请求信息
- 通过输入输出流向客户端发送响应信息
- 关闭连接