Java Socket 编程入门:实现简单的时间请求服务

目录

一、前言

二、代码环境

三、服务器端设计

四、客户端设计

五、结果展示

总结


一、前言

  • 简要介绍Socket编程的概念以及其在网络通信中的重要性。
  • 说明实验目标:通过Socket编程实现一个简单的服务器-客户端应用,客户端请求当前时间,服务器返回时间数据。

二、代码环境

  • 语言:Java
  • 开发工具:IntelliJ IDEA
  • 操作系统:Windows
  • 其他依赖:标准库即可

三、服务器端设计

  • 服务器端逻辑:
    • 监听8888端口,等待客户端链接。
    • 接受客户端的请求,如果收到 getdatetime,则获取服务器当前时间。
    • 将当前时间以 yyyy-MM-dd HH:mm:ss 的格式返回给客户端。
    • 关闭连接。
  • 服务器端代码实现
    • 使用 ServerSocket 来创建服务器监听指定端口。
    • 使用 BufferReader 读取客户端请求。
    • 使用 PrintWriter 向客户端返回数据。
  • 相关解释
    • accept() 阻塞等待客户端链接。
    • 时间的格式化使用 simpleDateFormat
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SockerServer {
    public static void main(String[] args) {

        try(ServerSocket serverSocket = new ServerSocket(8888)){
            System.out.println("服务端监听端口8888");

            while (true){
                //等待客户端链接
                Socket socket = serverSocket.accept();
                System.out.println("客户端链接成功!");

                //读取客户端发送数据
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String req = in.readLine();

                //判断是否为“getdatetime”请求
                if("getdatetime".equals(req)){
                    //获取当前格式化时间
                    String currentTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    out.println(currentTime);

                    System.out.println("消息来自客户端: " + currentTime);
                }

                socket.close();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

四、客户端设计

  • 客户端逻辑:
    • 连接到 8888 端口。
    • 发送请求字符串 getdatetime 
    • 接受服务器返回的时间字符串并显示。
    • 关闭连接。
  • 客户端代码实现:
    • 使用 Socket 类连接到服务器。
    • 发送请求并通过 BufferReader 接收响应。
  • 相关解释:
    • 通过流的方式进行数据传输:PrintWriter BufferReader
package socket_test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient {
    public static void main(String[] args) {

        try(Socket socket = new Socket("localhost", 8888)){

            //发送请求字符
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("getdatetime");

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String serverResponse = in.readLine();

            //显示服务器返回时间
            System.out.println("当前服务器时间: " + serverResponse);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

五、结果展示


总结

这个简单的时间请求服务展示了以下关键点:

  1. Socket编程基础:学习如何使用 ServerSocket Socket 类建立服务器和客户端之间的连接,以及如何通过输入输出流进行数据传输。

  2. 网络通信流程:服务器端监听一个端口并等待客户端连接,当客户端发送请求后,服务器处理请求并返回相应的数据,最后双方关闭连接。

  3. 时间格式化处理:使用SimpleDateFomat类来格式化日期时间,符合实际应用中的常见需求。

  4. 简单的客户端-服务器模型:通过这个实验,掌握了如何实现基本的客户端与服务器之间的单向通信模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值