日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/6/17 编程问答 34 豆豆

文章目錄

  • 一、服務(wù)器端完整代碼 Server.groovy
  • 二、客戶端完整代碼 Client.groovy
  • 三、運行服務(wù)器端與客戶端效果及過程分析





一、服務(wù)器端完整代碼 Server.groovy



參考 【Groovy】使用 Groovy 語言開發(fā)服務(wù)器 Server 和客戶端 Client 套接字程序 ( 服務(wù)器端開發(fā) ) 博客 ;

// 服務(wù)器端 def serverSocket = new ServerSocket(8088)// 存放客戶端連接的集合 def sockets = []// 服務(wù)器端是否關(guān)閉 def isQuit = false;// 接收線程 , 接收客戶端傳遞的數(shù)據(jù) Thread.start {while (!isQuit) {// 等待接收客戶端請求def socket = serverSocket.accept()/*上述 accept 操作還會拋出異常public Socket accept() throws IOException在 Java 中必須捕獲處理該異常在 Groovy 中不強制要求處理異常*/// 將客戶端連接存儲到 客戶端連接的集合 sockets 集合中sockets << socket// 再次開啟一個線程 , 讀取客戶端傳輸?shù)膬?nèi)容Thread.start {// 讀取數(shù)據(jù)的緩沖區(qū)def bytes = new byte[1024]// 沒有關(guān)閉的情況下才開始讀取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())}}}// 關(guān)閉服務(wù)器if (!serverSocket.isClosed()) {serverSocket.close();}sockets.each {it.close()} }// 讀取命令行數(shù)據(jù) def scanner = new Scanner(System.in)// 發(fā)送線程 , 向客戶端發(fā)送數(shù)據(jù) Thread.start {while (!isQuit) {def inputString = scanner.nextLine()if (inputString == "quit") {isQuit = true// 關(guān)閉服務(wù)器if (!serverSocket.isClosed()) {serverSocket.close();}sockets.each {it.close()}}sockets*.outputStream*.write(inputString.getBytes())} }



二、客戶端完整代碼 Client.groovy



參考 【Groovy】使用 Groovy 語言開發(fā)服務(wù)器 Server 和客戶端 Client 套接字程序 ( 客戶端開發(fā) ) 博客 ;

// 客戶端套接字 def client = new Socket("127.0.0.1", 8088)// 接收線程 , 讀取服務(wù)器端傳輸?shù)膬?nèi)容 Thread.start {// 讀取數(shù)據(jù)的緩沖區(qū)def bytes = new byte[1024]// 沒有關(guān)閉的情況下才開始讀取while (!client.isClosed()) {def len = client.inputStream.read(bytes)if (len > 0) {println "${client.remoteSocketAddress} : ${new String(bytes, 0, len)}"}} }// 發(fā)送線程 , 向服務(wù)器端發(fā)送數(shù)據(jù) Thread.start {client.outputStream.write("Hello Server , This is Client !".getBytes()) }



三、運行服務(wù)器端與客戶端效果及過程分析



先運行服務(wù)器端 , 服務(wù)器端 ServerSocket 創(chuàng)建 , 并開始監(jiān)聽 8088 端口 ;

然后運行客戶端 , 客戶端會自動向服務(wù)器端發(fā)送

"Hello Server , This is Client !"

字符串?dāng)?shù)據(jù) , 服務(wù)器端接收到數(shù)據(jù)后 , 在服務(wù)器端命令行打印該數(shù)據(jù) , 并向客戶端發(fā)送

"Hello Client, this is Server !"

字符串換數(shù)據(jù) , 客戶端接收到該數(shù)據(jù)后 , 在命令行中打印該字符串 ;


服務(wù)器端打印的內(nèi)容 :

客戶端打印的內(nèi)容 :


服務(wù)器端輸入 123 字符串 ,

客戶端會打印出該數(shù)據(jù) :

總結(jié)

以上是生活随笔為你收集整理的【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。