全套的:https://www.yuque.com/shizhiy...
基礎:https://blog.51cto.com/wangdy/1588379
Java Socket編程基礎及深刻講解:http://www.javashuo.com/article/p-fexnlneg-a.htmlhtml
Java中基於TCP協議實現網絡通訊的類java
① 建立ServerSocket和Socket
② 打開鏈接到Socket的輸入/輸出流
③ 按照協議對Socket進行讀/寫操做
④ 關閉輸入輸出流、關閉Socket編程
① 建立ServerSocket對象,綁定監聽端口
② 經過accept()方法監聽客戶端請求
③ 鏈接創建後,經過輸入流讀取客戶端發送的請求信息
④ 經過輸出流向客戶端發送鄉音信息
⑤ 關閉相關資源
**服務器
/** * 基於TCP協議的Socket通訊,實現用戶登陸,服務端 */ //一、建立一個服務器端Socket,即ServerSocket,指定綁定的端口,並監聽此端口 ServerSocket serverSocket = new ServerSocket(10086);//1024-65535的某個端口 //二、調用accept()方法開始監聽,等待客戶端的鏈接 Socket socket = serverSocket.accept(); //三、獲取輸入流,並讀取客戶端信息 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String info = null; while ((info = br.readLine()) != null) { System.out.println("我是服務器,客戶端說:" + info); } socket.shutdownInput();//關閉輸入流 //四、獲取輸出流,響應客戶端的請求 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write("歡迎您!"); pw.flush(); //五、關閉資源 pw.close(); os.close(); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close();
① 建立Socket對象,指明須要鏈接的服務器的地址和端口號
② 鏈接創建後,經過輸出流想服務器端發送請求信息
③ 經過輸入流獲取服務器響應的信息
④ 關閉響應資源 網絡
//客戶端 //一、建立客戶端Socket,指定服務器地址和端口 Socket socket =newSocket("localhost",10086); //二、獲取輸出流,向服務器端發送信息 OutputStream os = socket.getOutputStream();//字節輸出流 PrintWriter pw =newPrintWriter(os);//將輸出流包裝成打印流 pw.write("用戶名:admin;密碼:123"); pw.flush(); socket.shutdownOutput(); //三、獲取輸入流,並讀取服務器端的響應信息 InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while((info=br.readLine())!null){ System.out.println("我是客戶端,服務器說:"+info); } //四、關閉資源 br.close(); is.close(); pw.close(); os.close(); socket.close();
① 服務器端建立ServerSocket,循環調用accept()等待客戶端鏈接
② 客戶端建立一個socket並請求和服務器端鏈接
③ 服務器端接受苦讀段請求,建立socket與該客戶創建專線鏈接
④ 創建鏈接的兩個socket在一個單獨的線程上對話
⑤ 服務器端繼續等待新的鏈接
多線程
//服務器線程處理 //和本線程相關的socket Socket socket =null; // public serverThread(Socket socket){ this.socket = socket; } publicvoid run(){ //服務器處理代碼 } //============================================ //服務器代碼 ServerSocket serverSocket =newServerSocket(10086); Socket socket =null; int count =0;//記錄客戶端的數量 while(true){ socket = serverScoket.accept(); ServerThread serverThread =newServerThread(socket); serverThread.start(); count++; System.out.println("客戶端鏈接的數量:"+count); }
[連接]()socket