Java中利用socket實現簡單的服務端與客戶端的通訊(入門級)
Java程式設計中,要想要使用網路通訊,就離不開Socket程式設計,在此對socket進行簡單的介紹。首先宣告,這是一個入門級的介紹,僅僅簡單的實現了客戶端向服務端傳送資料,服務端正常的接收資料,當接收到特定的資料時,服務端和客戶端都關閉,一個服務端對應一個客戶端,不涉及多執行緒等內容,一切都是最簡單最基礎的知識點。
下面給出的程式碼,可以直接拷貝到eclipse中執行, 無需任何更改。
關於socket和seversocket的原理以及建構函式等一些簡單的介紹,可以檢視其他的一些部落格,期中寫的比較清晰,我給大家推薦一個[Java]Socket和ServerSocket學習筆記 。期中關於socket的通訊原理和需要基本瞭解的一些建構函式,常用函式等,都進行了簡單的介紹。
開發環境為eclipse,新建兩個普通的Java工程,一個命名為server_1,作為服務端,另一個命名為client_1,作為客戶端,完成的功能就是在客戶端的控制檯輸入內容後,客戶端將內容傳送至服務端,在服務端的控制檯可以看到輸入的內容,當輸入的內容為shutdown時,服務端和客戶端都關閉通訊,通訊結束。
服務端程式碼:
考慮這是一個入門級的程式,所以暫時不考慮各種異常情況,咋mian函式的後面就講各種異常丟擲。package server_1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class server_1 { public static void main(String[] args) throws IOException { //將異常全部丟擲 ServerSocket server = new ServerSocket(10000); //用serversocket來啟動伺服器,並指定埠號 System.out.println("伺服器啟動。。。"); Socket socket = server.accept(); //獲取客戶端的socket資訊 BufferedReader in = null; in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //啟動緩衝區 while (true) { String msg = in.readLine(); // 將客戶端傳送來的資訊儲存在msg中 System.out.println(msg); if (msg.equals("shutdown")) { //客戶端如果傳送的是shutdown,就關閉客戶端 break; } } in.close(); //執行相應的關閉操作 } }
建立seversocket,並且指定伺服器的埠號為10000,此時伺服器端開始執行。(埠號儘量取大於1024的數字,小於1024的一般都是系統程式佔用)
然後利用socket實現和客戶端的連線。
in是一個輸入緩衝區,客戶端傳送來的資訊就暫時儲存在這個緩衝區中。
然後用while語句,迴圈的監聽客戶端傳送過來的資料,當是一般資訊時,就講客戶端發來的內同打印到控制檯,如果是“shutdown”,則關閉伺服器端,此次通訊終止。
客戶端程式:
package client_1; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class client_1 { public static void main(String[] args) throws Exception { System.out.println("客戶端啟動"); Socket socket = new Socket("localhost", 10000); //啟動socket,並連線本地主機的相應埠號 PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//從控制檯獲取輸入的內容 //不斷的獲取輸入的內容,並不斷的傳送給伺服器,當輸入shutdown時,跳出迴圈,停止執行 while (true) { String msg = reader.readLine(); out.println(msg); out.flush(); if (msg.equals("shutdown")) { break; } } //執行相應的關閉操作 socket.close(); out.close(); reader.close(); } }
同樣也是在main函式後就丟擲所有的異常,不考慮一些比較複雜的異常情況。
建立socket來準備進行通訊,指定服務端的位置為“localhost”(也就是本機,也可以使用IP:127.0.0.1),埠號要和伺服器端的埠號對應,為10000。
建立reader為緩衝區,將控制檯輸入的內容先儲存到緩衝區中。
建立out用來發送資料。
通過while迴圈監聽控制檯,通過socket將緩衝區的內容傳送到服務端,如果輸入的是一般結果,則將內容傳送給服務端,如果輸入的時“shutdown”,則將內容傳送後跳出迴圈, 此次通訊結束。
以上就是關於socket通訊的一個非常簡答的例子。
2015年11月19日 西安交通大學