刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

面试题

手写 ServerSocket 服务端和客户端通信代码;

使用微信搜索喵呜刷题,轻松应对面试!

答案:

解答思路:

要手写ServerSocket服务端和客户端通信代码,首先需理解ServerSocket和Socket的工作原理及其在TCP/IP协议栈中的角色。ServerSocket用于创建服务器并监听来自客户端的连接请求,而Socket用于客户端和服务器之间的通信。下面是一个简单的Java实现示例。

最优回答:

一、服务端(ServerSocket)代码:

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try {
            // 监听指定端口
            ServerSocket serverSocket = new ServerSocket(8000);
            System.out.println("Server is listening on port 8000...");
            
            while (true) {
                // 接受客户端连接请求
                Socket socket = serverSocket.accept();
                System.out.println("Client connected from " + socket.getInetAddress().getHostName());
                
                // 创建输入流读取客户端数据
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String info = null;
                while ((info = br.readLine()) != null) {
                    System.out.println("Message from client: " + info);
                }
                br.close(); // 关闭输入流和连接
                socket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、客户端(Socket)代码:

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            // 连接服务器指定端口号,这里假设服务器IP为localhost(即本机)端口为上面服务端监听的端口号8000。如果服务器在其他机器上,则换成相应IP地址。    System.out.println("Connecting to server...");");        Socket socket = new Socket("localhost", 8000);        System.out.println("Connected to server!"); // 创建输出流发送数据到服务器        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));        String userInput;        while ((userInput = in.readLine()) != null) {            out.println(userInput);        }        out.close(); // 关闭输出流和连接        socket.close();    } catch (IOException e) {        e.printStackTrace();    } } }```

解析:

在实际应用中,还需要考虑线程管理(例如多线程处理多个客户端连接),异常处理,安全性问题(如数据加密和防火墙穿透),以及性能优化(如使用缓冲区提高效率)。此外,不同的编程语言和框架可能有不同的实现方式,但核心原理是相似的。
创作类型:
原创

本文链接:手写 ServerSocket 服务端和客户端通信代码;

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share