【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )

简介: 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )

文章目录

一、服务器端 ServerSocket 开发

1、创建服务器端套接字 ServerSocket

2、等待客户端请求

3、管理客户端连接

4、接收客户端数据线程

5、向客户端发送数据线程

二、服务器端 ServerSocket 完整代码示例





一、服务器端 ServerSocket 开发



1、创建服务器端套接字 ServerSocket


在服务器端 , 创建 ServerSocket , 绑定一个给定的端口号 8088 80888088 ,


// 服务器端
def serverSocket = new ServerSocket(8088)



2、等待客户端请求


然后调用 ServerSocket 服务器套接字 的 accept 方法 , 阻塞当前线程 , 等待客户端连接 ,


 

// 等待接收客户端请求
        def socket = serverSocket.accept()


注意 , 上述 accept 操作还会抛出异常 ,


public Socket accept() throws IOException


在 Java 中必须捕获并处理该异常 , 在 Groovy 中不强制要求处理异常 , 建议进行捕获处理 ;



3、管理客户端连接


声明一个集合 , 用于存放客户端连接 , 集合类型是 ArrayList 类型 ;


// 存放客户端连接的集合
def sockets = []


当 ServerSocket 服务器套接字 accept 到客户端请求 , 会得到 客户端的 Socket 套接字 , 将客户端连接存储到 客户端连接的集合 sockets 集合中 ;


   

// 将客户端连接存储到 客户端连接的集合 sockets 集合中
        sockets << socket


4、接收客户端数据线程


获取到 客户端套接字 Socket 后 , 可以开启一个线程 , 专门用于与客户端进行通信 ;


   

// 再次开启一个线程 , 读取客户端传输的内容
        Thread.start {
            // 读取数据的缓冲区
            def bytes = new byte[1024]
            // 没有关闭的情况下才开始读取
            while (!socket.isClosed()) {
                def len = socket.inputStream.read(bytes)
                if (len > 0) {
                    println "${socket.remoteSocketAddress} : ${new String(bytes, 0, len)}"
                }
                socket.outputStream.write("Hello Client, this is Server !".getBytes())
            }
        }



5、向客户端发送数据线程


使用 Scanner 从命令行中读取数据 ,


// 读取命令行数据
def scanner = new Scanner(System.in)


命令行接收字符串数据 ,


def inputString = scanner.nextLine()


将命令行输入的字符串 , 发送给所有的客户端进程 ;


sockets*.outputStream*.write(inputString.getBytes())



服务器向客户端发送数据的线程 :


// 读取命令行数据
def scanner = new Scanner(System.in)
// 发送线程 , 向客户端发送数据
Thread.start {
    while (!isQuit) {
        def inputString = scanner.nextLine()
        if (inputString == "quit") {
            isQuit = true
            // 关闭服务器
            if (!serverSocket.isClosed()) {
                serverSocket.close();
            }
            sockets.each {
                it.close()
            }
        }
        sockets*.outputStream*.write(inputString.getBytes())
    }
}





二、服务器端 ServerSocket 完整代码示例



// 服务器端
def serverSocket = new ServerSocket(8088)
// 存放客户端连接的集合
def sockets = []
// 服务器端是否关闭
def isQuit = false;
// 接收线程 , 接收客户端传递的数据
Thread.start {
    while (!isQuit) {
        // 等待接收客户端请求
        def socket = serverSocket.accept()
        /*
            上述 accept 操作还会抛出异常
            public Socket accept() throws IOException
            在 Java 中必须捕获处理该异常
            在 Groovy 中不强制要求处理异常
         */
        // 将客户端连接存储到 客户端连接的集合 sockets 集合中
        sockets << socket
        // 再次开启一个线程 , 读取客户端传输的内容
        Thread.start {
            // 读取数据的缓冲区
            def bytes = new byte[1024]
            // 没有关闭的情况下才开始读取
            while (!socket.isClosed()) {
                def len = socket.inputStream.read(bytes)
                if (len > 0) {
                    println "${socket.remoteSocketAddress} : ${new String(bytes, 0, len)}"
                }
                socket.outputStream.write("Hello Client, this is Server !".getBytes())
            }
        }
    }
    // 关闭服务器
    if (!serverSocket.isClosed()) {
        serverSocket.close();
    }
    sockets.each {
        it.close()
    }
}
// 读取命令行数据
def scanner = new Scanner(System.in)
// 发送线程 , 向客户端发送数据
Thread.start {
    while (!isQuit) {
        def inputString = scanner.nextLine()
        if (inputString == "quit") {
            isQuit = true
            // 关闭服务器
            if (!serverSocket.isClosed()) {
                serverSocket.close();
            }
            sockets.each {
                it.close()
            }
        }
        sockets*.outputStream*.write(inputString.getBytes())
    }
}


目录
相关文章
|
24天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
140 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
46 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
2月前
|
Ubuntu 网络协议 关系型数据库
超聚变服务器2288H V6使用 iBMC 安装 Ubuntu Server 24.04 LTS及后续系统配置
【11月更文挑战第15天】本文档详细介绍了如何使用iBMC在超聚变服务器2288H V6上安装Ubuntu Server 24.04 LTS,包括连接iBMC管理口、登录iBMC管理界面、配置RAID、安装系统以及后续系统配置等步骤。
200 4
|
3月前
|
网络协议 Ubuntu Linux
gpg从公钥服务器接收失败(gpg: keyserver receive failed: Server indicated a failure)
通过上述步骤,大多数情况下应该能够解决GPG从公钥服务器接收失败的问题。如果问题依旧存在,可能需要进一步调查与公钥服务器相关的更深层次的技术问题,或者考虑在相关社区论坛寻求帮助。
525 1
|
3月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
106 4
|
3月前
|
网络协议 Windows
Windows Server 2019 DHCP服务器搭建
Windows Server 2019 DHCP服务器搭建
|
3月前
|
安全 区块链 数据库
|
6天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
|
5天前
|
存储 运维 安全
阿里云弹性裸金属服务器是什么?产品规格及适用场景介绍
阿里云服务器ECS包括众多产品,其中弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。分钟级的交付周期将提供给您实时的业务响应能力,助力您的核心业务飞速成长。本文为大家详细介绍弹性裸金属服务器的特点、优势以及与云服务器的对比等内容。
|
13天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式