【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )
生活随笔
收集整理的這篇文章主要介紹了
【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 << socket4、接收客戶端數據線程
獲取到 客戶端套接字 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 套接字程序 ( 服务器端开发 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】Groovy 运算符重载
- 下一篇: 【Groovy】使用 Groovy 语言