MST

星途 面试题库

面试题:Java网络编程之Socket通信

请简述Java中基于Socket进行网络通信的基本流程,并编写一个简单的客户端 - 服务器程序示例,实现客户端向服务器发送一条消息,服务器接收并打印该消息。
15.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

基于Socket进行网络通信的基本流程

  1. 服务器端
    • 创建ServerSocket对象,绑定指定端口。
    • 调用accept()方法监听客户端连接,该方法会阻塞直到有客户端连接上来。
    • 与客户端建立连接后,通过Socket对象获取输入流和输出流,进行数据的读写操作。
    • 操作完成后,关闭相关资源(如输入流、输出流、Socket等)。
  2. 客户端
    • 创建Socket对象,指定服务器的IP地址和端口号,尝试连接服务器。
    • 连接成功后,通过Socket对象获取输入流和输出流,进行数据的读写操作。
    • 操作完成后,关闭相关资源(如输入流、输出流、Socket等)。

代码示例

  1. 服务器端代码(Server.java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(12345)) {
            System.out.println("服务器已启动,等待客户端连接...");
            try (Socket socket = serverSocket.accept();
                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
                System.out.println("客户端已连接");
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println("收到客户端消息: " + inputLine);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 客户端代码(Client.java)
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 12345);
             BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))) {
            out.write("Hello, Server!\n");
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,服务器端在端口12345监听客户端连接,客户端连接到本地主机(localhost)的12345端口,并向服务器发送一条消息“Hello, Server!”,服务器接收并打印该消息。注意在实际运行时,需先启动服务器端程序,再启动客户端程序。