Java Scoket实现简单的时间服务器

1.Socket简介

Java Socket是一种网络通信机制,它使用TCP/IP协议来实现网络中的设备之间的数据传输。Java通过java.net包提供了对Socket编程的支持。以下是Java Socket编程的一些基本概念和步骤:

基本概念

  1. Socket(套接字):Socket是网络通信的端点。它是一个抽象层,它将底层网络通信的细节隐藏起来,为开发者提供了一个简单易用的接口。

  2. ServerSocket(服务器套接字):用于服务器端,监听特定端口上的连接请求。当一个客户端尝试连接服务器时,ServerSocket会创建一个新的Socket对象来处理这个连接。

  3. Socket(客户端套接字):用于客户端,用于与服务器建立连接。

  4. TCP/IP协议:是一组用于不同类型计算机网络之间进行通信的协议,TCP负责在网络中传输数据包,确保数据正确无误地到达目的地,而IP协议负责定位网络上的设备。

2.client端实现

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws Exception{
        Socket socket = new Socket();
        socket.connect(new InetSocketAddress("127.0.0.1",9999));
        System.out.println("连接服务成功,开始数据传输!!!");

        //向服务端写入数据
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("请求获取当前时间\n");
        bw.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        System.out.println("读取到服务端的响应是:"+br.readLine());

        //关闭资源
        bw.close();
        br.close();
        socket.close();
    }

}

3.Server端实现

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {

    /**
     * 创建线程池,用于处理客服端连接的请求
     */
    static ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

    static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static void main(String[] args) throws Exception{
        ServerSocket serverSocket = new ServerSocket();
        final int port = 9999;
        //绑定端口
        serverSocket.bind(new InetSocketAddress(port));
        System.out.println("当前服务监听的端口是:"+port);
        while (true){
            //监听获取到的请求,为了防止请求过大,一般会采用多线程的处理机制
            Socket socket = serverSocket.accept();
            threadPool.execute(()->{
                try {
                    //打开输入流,获取到客户端传入的请求参数
                    BufferedReader inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    System.out.println("客户端发送的请求是:"+inputStream.readLine());

                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    //由于演示读取是按照一行一行的操作进行,所以需要通过换行符标识句尾
                    bufferedWriter.write("当前时间是:"+format.format(new Date())+"\n");
                    bufferedWriter.flush();

                    inputStream.close();
                    bufferedWriter.close();
                    socket.close();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }
    }

}

4.总结

Java Socket是Java网络编程中一个非常核心的概念,它提供了一套API来实现基于TCP/IP协议的网络通信。以下是Java Socket的简要总结:

  1. Socket(套接字):是网络通信的端点,用于标识网络上的两个点之间的连接。

  2. ServerSocket:用于服务器端,监听特定端口上的连接请求,并为每个请求创建一个新的Socket来处理。

  3. Socket:用于客户端,用于建立与服务器的连接。

  4. TCP/IP协议:确保数据在网络中可靠传输的协议。

  5. 服务器端

    • 创建ServerSocket并监听端口。
    • 使用accept方法等待客户端连接。
    • 获取输入输出流进行数据交换。
    • 关闭连接。
  6. 客户端

    • 创建Socket并连接到服务器。
    • 获取输入输出流进行数据交换。
    • 关闭连接。
  7. 数据传输:通过输入输出流(InputStreamOutputStream)在客户端和服务器之间进行数据的发送和接收。

  8. 多线程:为了同时处理多个客户端,服务器端通常采用多线程技术。

  9. 异常处理:网络编程需要妥善处理各种网络异常。

  10. 资源管理:确保所有网络资源(如流和套接字)在使用完毕后被正确关闭。

Java Socket编程是构建网络应用程序的基础,无论是客户端还是服务器端应用程序,都可以通过这套API实现数据的发送和接收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值