热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Groovy】使用Groovy语言开发服务器Server和客户端Client套接字程序(服务器客户端完整代码示例|运行服务器端与客户端效果及过程分析)

文章目录一、服务器端完整代码Server.groovy二、客户端完整代码Client.groovy三、运行服务器端与客户端效果及过程分析一、服务器端完整代码Server.groov


文章目录

  • 一、服务器端完整代码 Server.groovy
  • 二、客户端完整代码 Client.groovy
  • 三、运行服务器端与客户端效果及过程分析










一、服务器端完整代码 Server.groovy





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

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









二、客户端完整代码 Client.groovy





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

// 客户端套接字
def client &#61; new Socket("127.0.0.1", 8088)// 接收线程 , 读取服务器端传输的内容
Thread.start {// 读取数据的缓冲区def bytes &#61; new byte[1024]// 没有关闭的情况下才开始读取while (!client.isClosed()) {def len &#61; client.inputStream.read(bytes)if (len > 0) {println "${client.remoteSocketAddress} : ${new String(bytes, 0, len)}"}}
}// 发送线程 , 向服务器端发送数据
Thread.start {client.outputStream.write("Hello Server , This is Client !".getBytes())
}









三、运行服务器端与客户端效果及过程分析





先运行服务器端 , 服务器端 ServerSocket 创建 , 并开始监听 8088 端口 ;

然后运行客户端 , 客户端会自动向服务器端发送

"Hello Server , This is Client !"

字符串数据 , 服务器端接收到数据后 , 在服务器端命令行打印该数据 , 并向客户端发送

"Hello Client, this is Server !"

字符串换数据 , 客户端接收到该数据后 , 在命令行中打印该字符串 ;



服务器端打印的内容 :

在这里插入图片描述

客户端打印的内容 :

在这里插入图片描述



服务器端输入 123 字符串 ,

在这里插入图片描述

客户端会打印出该数据 :

在这里插入图片描述


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
author-avatar
手机用户2502885997
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有