MST

星途 面试题库

面试题:网络编程之Java Socket基础应用

请描述Java Socket编程中,如何创建一个简单的TCP服务器端和客户端进行数据传输?并解释在这个过程中涉及到的关键类和方法,例如ServerSocket、Socket、InputStream、OutputStream等。
45.6万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

TCP服务器端实现步骤:

  1. 创建ServerSocket对象
    • 代码示例ServerSocket serverSocket = new ServerSocket(8888);
    • 解释ServerSocket类用于创建服务器端套接字,构造函数中的参数指定服务器监听的端口号。
  2. 监听客户端连接
    • 代码示例Socket clientSocket = serverSocket.accept();
    • 解释accept()方法是阻塞方法,等待客户端连接。当有客户端连接时,返回一个代表该客户端的Socket对象。
  3. 获取输入输出流
    • 获取输入流
      • 代码示例InputStream inputStream = clientSocket.getInputStream();
      • 解释:通过Socket对象的getInputStream()方法获取输入流,用于读取客户端发送的数据。
    • 获取输出流
      • 代码示例OutputStream outputStream = clientSocket.getOutputStream();
      • 解释:通过Socket对象的getOutputStream()方法获取输出流,用于向客户端发送数据。
  4. 数据传输
    • 读取数据
      • 代码示例
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String message = new String(buffer, 0, length);
    - **解释**:使用输入流的`read()`方法读取数据到字节数组`buffer`中,`read()`方法返回读取的字节数。然后将字节数组转换为字符串。
- **发送数据**:
    - **代码示例**:`outputStream.write("Hello, Client!".getBytes());`
    - **解释**:将要发送的字符串转换为字节数组,通过输出流的`write()`方法发送数据。

5. 关闭连接: - 代码示例

inputStream.close();
outputStream.close();
clientSocket.close();
serverSocket.close();
- **解释**:依次关闭输入流、输出流、客户端`Socket`和服务器端`ServerSocket`,释放资源。

TCP客户端实现步骤:

  1. 创建Socket对象
    • 代码示例Socket socket = new Socket("localhost", 8888);
    • 解释Socket类用于创建客户端套接字,构造函数中第一个参数指定服务器的IP地址(这里使用localhost表示本地主机),第二个参数指定服务器监听的端口号。
  2. 获取输入输出流
    • 获取输入流
      • 代码示例InputStream inputStream = socket.getInputStream();
      • 解释:同服务器端获取输入流解释,用于读取服务器端发送的数据。
    • 获取输出流
      • 代码示例OutputStream outputStream = socket.getOutputStream();
      • 解释:同服务器端获取输出流解释,用于向服务器端发送数据。
  3. 数据传输
    • 发送数据
      • 代码示例outputStream.write("Hello, Server!".getBytes());
      • 解释:同服务器端发送数据解释,将字符串转换为字节数组通过输出流发送。
    • 读取数据
      • 代码示例
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String message = new String(buffer, 0, length);
    - **解释**:同服务器端读取数据解释,从输入流读取数据到字节数组并转换为字符串。

4. 关闭连接: - 代码示例

inputStream.close();
outputStream.close();
socket.close();
- **解释**:关闭输入流、输出流和客户端`Socket`,释放资源。

关键类和方法总结:

  • ServerSocket:用于服务器端监听指定端口,关键方法accept()用于接受客户端连接。
  • Socket:客户端和服务器端进行数据传输的套接字,关键方法getInputStream()getOutputStream()分别用于获取输入输出流。
  • InputStream:用于读取数据,关键方法read()用于从流中读取数据到字节数组。
  • OutputStream:用于写入数据,关键方法write()用于将字节数组的数据写入流中。