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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、服務器端 ServerSocket 開發
    • 1、創建服務器端套接字 ServerSocket
    • 2、等待客戶端請求
    • 3、管理客戶端連接
    • 4、接收客戶端數據線程
    • 5、向客戶端發送數據線程
  • 二、服務器端 ServerSocket 完整代碼示例





一、服務器端 ServerSocket 開發




1、創建服務器端套接字 ServerSocket


在服務器端 , 創建 ServerSocket , 綁定一個給定的端口號 808880888088 ,

// 服務器端 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())} }

總結

以上是生活随笔為你收集整理的【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。