二、多執行緒實現簡單的socket通訊例項(TCP)
阿新 • • 發佈:2018-11-07
1.伺服器端
import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * 類功能描述:先啟動伺服器端,再啟動客戶端 * * @author:*** * @createTime:2018/11/5 16:02 */ public class Server { public static void main(String[] args) { try { //1.建立伺服器socket 指定監聽埠 ServerSocket serverSocket = new ServerSocket(18080); //2.呼叫accept()開始監聽,等待客戶的連線 System.out.println("---------伺服器即將啟動,等待客戶端連線---------"); int count = 1; //3.迴圈監聽等待客戶端的連線 while (true) { Socket socket = serverSocket.accept(); ServerThread serverThread = new ServerThread(socket); serverThread.start(); System.out.println("客戶端連線數:" + count++); } } catch (IOException e) { e.printStackTrace(); } } }
2.執行緒類
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; /** * 類功能描述:伺服器執行緒處理類 * * @author:*** * @createTime:2018/11/7 9:15 */ public class ServerThread extends Thread { private Socket socket; public ServerThread(Socket socket) { this.socket = socket; } @Override public void run() { BufferedReader br = null; PrintWriter pw = null; try { //3.讀取客戶端傳送資訊 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("接收到客戶端傳送的訊息為:" + br.readLine()); socket.shutdownInput(); //4.推送客戶端請求 pw = new PrintWriter(socket.getOutputStream()); pw.write("response"); pw.flush(); socket.shutdownOutput(); //5.關閉連線 } catch (Exception e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (pw != null) { pw.close(); } if (socket != null) { socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
3.客戶端類
import java.io.*; import java.net.Socket; /** * 類功能描述:客戶端,啟動多個客戶端 * * @author:*** * @createTime:2018/11/5 16:03 */ public class Client { public static void main(String[] args) { try { //1.建立客戶端socket,指定伺服器地址和埠 Socket socket = new Socket("127.0.0.1", 18080); //2.向伺服器傳送資訊 PrintWriter pw = new PrintWriter(socket.getOutputStream()); pw.write("request"); pw.flush(); socket.shutdownOutput(); //3.讀取伺服器推送資訊 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("接收到伺服器推送的訊息為:" + br.readLine()); socket.shutdownInput(); //4.關閉連線 br.close(); pw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }