Java中Socket的用法(一) 普通Socket的簡單用法
阿新 • • 發佈:2018-12-18
Java中網路通訊是通過Socket實現的,Socket分為ServerSocket和Socket兩大類,ServerSocket用於服務端,可以通過accept方法監聽請求,監聽到請求後返回Socket,Socket用於具體完成資料傳輸,客戶端直接使用Socket發起請求並傳輸資料
ServerSocket的使用可以分為三步:
- 建立ServerSocket。ServerSocket的構造方法一共有5個,用起來最方便的是ServerSocket(int port),只需要一個port(埠號)就可以了。
- 呼叫創建出來的ServerSocket的accept方法進行監聽。accept方法是阻塞方法,是說呼叫accept方法後程序會停下來等待連線請求,在接收到請求後accept方法會放hi一個Socket。
- 使用accept方法返回的Socket與客戶端進行通訊。
下面寫一個服務端ServerSocket簡單的使用示例:
/** * @Description: 普通Socket的用法:伺服器端 * @Author: gradual * @Date: 2018-10-24 上午11:02 */ public class Server { public static void main(String[] args) { try { //建立一個ServerSocket監聽8080埠 ServerSocket server = new ServerSocket(8080); //等待請求 Socket socket = server.accept(); //接收到請求後使用socket進行通訊,建立BufferedReader用於讀取資料 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = is.readLine(); System.out.println("接收到客戶端訊息 :" + line); //建立PrintWriter,用於傳送資料 PrintWriter pw = new PrintWriter(socket.getOutputStream()); pw.println("返回訊息 : " + line); pw.flush(); //關閉資源 pw.close(); is.close(); socket.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } }
在上面的Server裡面,首先建立了ServerSocket,然後呼叫accept等待請求,當接收到請求後,用返回的Socket建立Reader和Writer來接收和傳送資料,Reader接收到資料後儲存到line,然後列印到控制檯,再將資料傳送到client,告訴client接收到的是什麼資料,功能非常簡單。
然後再來看看客戶端Socket的用法。Socket的使用也一樣,首先建立一個Socket,Socket的構造方法非常多,這裡用的是Socket(String host, int port),把目標主機的地址和埠號傳入即可,Socket建立的過程就會跟服務端建立連線。建立完Socket後,再用其建立Writer和Reader來傳輸資料,資料傳輸完後釋放資源關閉連線就可以了。
下面看一個客戶端簡單的示例:
/**
* @Description: 普通Socket的用法:客戶端
* @Author: gradual
* @Date: 2018-10-24 上午11:07
*/
public class Client {
public static void main(String[] args) {
String msg = "Client Data";
try {
//建立一個Socket,跟本機的8080埠連結
Socket socket = new Socket("127.0.0.1", 8080);
//使用Socket建立PrintWriter和BufferedReader進行讀寫
PrintWriter pw = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//傳送資料
pw.println(msg);
pw.flush();
//接收資料
String line = is.readLine();
System.out.println("接收到伺服器返回的資料 : " + line);
//關閉資源
pw.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服務類終端列印訊息:
客戶機終端列印訊息:
這個小案例功能也非常簡單,啟動後自動將msg傳送給服務端,然後再接收服務端返回的資料並列印到控制檯,最後釋放資源關閉連線。