java--實現多個客戶端與服務端連線
阿新 • • 發佈:2019-01-09
在客戶端與服務端的簡單連線上進行了略微的新增,實現了多個客戶端與服務端的連線
目的:
多個客戶端與服務端的連線,實現服務端發訊息客戶端可以接受到程式碼:
服務端
import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Server { // 存放服務端接收到的客戶端類(可以進行操作)的佇列 public ArrayList<ClientServer> clientServer; public Server() { // TODO Auto-generated constructor stub // 初始化佇列 clientServer = new ArrayList<ClientServer>(); } public void initServer() { try { // 建立監聽的埠號 ServerSocket s = new ServerSocket(8888); System.out.println("啟動伺服器....."); System.out.println("等待客戶機進入......."); // 讓server進入阻塞狀態(等待客戶機的進入),有客戶機連線上此埠的server客戶端就會返回一個socket物件,伺服器進行接受 // 不斷的去接受客戶端發來的請求,並將接受到的socket放到佇列中 while (true) { Socket ss = s.accept(); clientServer.add(new ClientServer(ss)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.initServer(); } /** * 操作類,接受了socket,進行服務端對客戶端的操作 * * @author M_WBCG * */ class ClientServer { Socket ss; public ClientServer(Socket ss) { // TODO Auto-generated constructor stub this.ss = ss; // socket的輸出流(該流為位元組流) OutputStream out; try { out = ss.getOutputStream(); String msg = "伺服器說你好\n"; out.write(msg.getBytes()); // 將流和socket關掉,不關掉客戶端在未接受到訊息的時候會斷開連線 out.close(); ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
客戶端
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { Socket s; try { // 客戶機連線服務端的IP地址和埠號 s = new Socket("127.0.0.1", 8888); System.out.println("連線到伺服器....."); // 獲得輸入流(位元組流),再把位元組輸入流放到緩衝輸入流中 InputStream in = s.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String msg = ""; msg = br.readLine(); System.out.println(msg); //關閉掉流 br.close(); in.close(); s.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }