面试题答案
一键面试Socket基本概念
Socket(套接字)是一种通信机制,用于在不同主机间进行进程通信。它提供了一种网络通信的端点,使得不同主机上的应用程序能够通过网络进行数据传输。Socket通常被看作是应用层与传输层之间的接口,基于传输层协议(如TCP或UDP)来实现数据的可靠传输或快速传输。
使用Socket进行简单的客户端和服务器端通信步骤(以TCP为例)
- 服务器端:
- 创建ServerSocket对象:指定服务器监听的端口号,例如:
ServerSocket serverSocket = new ServerSocket(12345);
- **监听客户端连接**:调用`serverSocket.accept()`方法,该方法会阻塞直到有客户端连接到服务器,返回一个新的`Socket`对象用于与客户端通信,例如:
Socket clientSocket = serverSocket.accept();
- **获取输入输出流**:通过`clientSocket`获取`InputStream`和`OutputStream`,用于读取客户端发送的数据和向客户端发送数据,例如:
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
- **数据交互**:使用输入输出流进行数据的读写操作,例如读取客户端发送的字符串:
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
向客户端发送字符串:
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello, client!");
- **关闭连接**:通信结束后,关闭`Socket`和`ServerSocket`,释放资源,例如:
clientSocket.close();
serverSocket.close();
- 客户端:
- 创建Socket对象:指定服务器的IP地址和端口号,尝试连接服务器,例如:
Socket socket = new Socket("127.0.0.1", 12345);
- **获取输入输出流**:与服务器端类似,通过`socket`获取`InputStream`和`OutputStream`,例如:
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
- **数据交互**:使用输入输出流进行数据的读写操作,例如向服务器发送字符串:
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello, server!");
读取服务器发送的字符串:
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
- **关闭连接**:通信结束后,关闭`Socket`,释放资源,例如:
socket.close();