1. Socket 通信简介及模型
Java Socket 可实现客户端--服务器间的双向实时通信。java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端。
1.1 重要的Socket API:
- Accept方法用于产生”阻塞”,直到接受到一个连接,并且返回一个客户端的Socket对象实例。”阻塞”是一个术语,它使程序运行暂时”停留”在这个地方,直到一个会话产生,然后程序继续
- GetInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。
- GetOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
2. Socket 通信实现方法
2.1 服务器端(单线程)
- 实例化SeverSocket对象。
- 调用ServerSocket的accept()方法,生成socket对象,监听从端口上发来的连接请求,等待连接期间会造成阻塞,。
- 根据生成的客户端的Socket对象,进行读写IO操作。
- 关闭打开的流和Socket对象。
2.2 客户端
- 连接客户端指定IP端口,实例化socket对象。
- 根据生成socket对象,进行读写IO操作。
- 关闭打开的流和Socket对象。
2.3 服务器端 (多线程)
- 实例化SeverSocket对象,循环调用accept()等待客户端连接
- 客户端创建一个socket并请求和服务器端连接
- 服务器端接受客户端请求,创建socket与该客户建立专线连接
- 建立连接的两个socket在一个单独的线程上对话
- 服务器端继续等待新的连接
PS:多线程下服务器发送数据,客户端争抢服务器资源
服务器代码(单线程/单客户端)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketService {
//搭建服务器端
public static void main(String[] args) throws IOException{
SocketService socketService = new SocketService();
//1、a)创建一个服务器端Socket,即SocketService
socketService.oneServer();
}
public void oneServer(){
try{
ServerSocket server=null;
try{
server=new ServerSocket(3900);
//b)指定绑定的端口,并监听此端口。
System.out.println("服务器启动成功");
//创建一个ServerSocket在端口3900监听客户请求
}catch(Exception e) {
Syst