Socket套接字
ServerSocket
ServerSocket是创建TCP服务端Socket的API.
ServerSocket构造方法:
方法签名 | 方法说明 |
---|---|
ServerSocket(int port) | 创建一个服务端套接字Socket,并绑定到指定端口 |
ServerSocket方法:
方法签名 | 方法说明 |
---|---|
Socket accept() | 开始监听指定端口(创建时绑定的端口),当有客户端连接时,返回一个服务端Socket对象,并基于该Socket建立与客户端的连接 ,否则阻塞等待 |
void close() | 关闭套接字 |
Socket
Socket是客户端Socket,或者是服务端中收到客户端建立连接的请求后,返回的服务端Socket.
Socket的构造方法:
方法签名 | 方法说明 |
---|---|
Socket(String host, int port) | 创建一个客户端套接字Socket, 并与对应主机,对应ip建立连接 |
Socket方法:
方法签名 | 方法说明 |
---|---|
InetAddress getInetAddress() | 返回套接字连接的地址 |
InputStream getInputStream() | 返回套接字的输入流 |
OutputStream getOutputStream() | 返回套接字的输出流 |
案例演示
TCP回显服务器
public class TcpEchoServer {
private ServerSocket serverSocket = null;
public TcpEchoServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
}
public void start() throws IOException {
System.out.println("服务器启动!");
while (true) {
// 1. 处理客户端的连接
// 把内核中的连接获取到应用程序中了,连接相当于一个个任务,放在队列中
// 类似于生产者消费者模型
// 如果没有客户端连接成功,就会进入阻塞.
// 从队列中出序号最前面的连接, 与三次握手没有关系
Socket clientSocket = serverSocket.accept();
Thread thread = new Thread(() -> {
try {
processConnection(clientSocket);
} catch (IOException e) {
throw new Run