Socket简介
socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信
socket通信系统模块示意图:
基本socket客户/服务端通信流程示意图:
实现流程:
socket服务端通信流程
- 建立serverSocket
- 监听端口
- 监听接收
- 实现发送
- 关闭连接
代码结构:
代码实现:
主要实现:
package com.haoyang.allinone.tcpserver;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TcpServer {
private static TcpServer instance;
private ServerSocket serverSocket;
private List<SocketBean> list = new ArrayList<>();
private ExecutorService executorService;
private TcpServerListener tcpServerListener;
private long TIME_OUT = 30000;//超时时间30s,30秒未收到心跳自动断开
private TcpServer(){
}
public void init(int port){
getExecutorService().submit(new SocketThread(port));
getExecutorService().submit(new ReceiveThread());
}
//启动客户端监听线程和消息监听线程
public void init(int port, int backlog){
getExecutorService().submit(new SocketThread(port,backlog));
getExecutorService().submit(new ReceiveThread());
}
//构建线程池
private ExecutorService getExecutorService(){
if (executorService == null || executorService.isShutdown()) {
executorService = Executors.newFixedThreadPool(4);
}
return executorService;
}
//单例模式
public static TcpServer getInstance(){
if (instance == null){
synchronized (TcpServer.class){
if (instance == null){
instance = new TcpServer();
}
}
}
return instance;
}
//返回记录的socket连接对象
public List<SocketBean> getList(){
return list;
}
//监听--客户端接入线程
class SocketThread extends Threa