java socket伺服器客戶端多執行緒小例子
阿新 • • 發佈:2019-01-08
Clientpackage com.xueyoucto.xueyou; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; /** * Hello world! * Server */ class ServerThread implements Runnable{ Socket s = null; BufferedReader br = null; public ServerThread(Socket s) throws IOException{ this.s = s; br = new BufferedReader(new InputStreamReader(s.getInputStream())); } @Override public void run() { try { String content = null; while ((content = readFromClient()) != null){ System.out.println("客戶端發來內容:" + content); for (Socket socket : App.sockets) { PrintStream ps = new PrintStream(s.getOutputStream()); ps.println(content); } } } catch (IOException e) { e.printStackTrace(); } } public String readFromClient(){ try { return br.readLine(); } catch (IOException e) { e.printStackTrace(); App.sockets.remove(s); } return null; } } public class App { private static final int SERVER_PORT = 60000; public static ArrayList<Socket> sockets = new ArrayList<Socket>(); public static void main(String[] args) throws IOException{ ServerSocket serverSocket = new ServerSocket(SERVER_PORT); while(true){ Socket s = serverSocket.accept(); System.out.println("someone in ..."); sockets.add(s); new Thread(new ServerThread(s)).start(); } } }
package com.xueyoucto.xueyou; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; /** * Hello world! * client */ class ClientThread implements Runnable{ private Socket s; BufferedReader br = null; public ClientThread(Socket s) throws IOException{ this.s = s; br = new BufferedReader(new InputStreamReader(s.getInputStream())); } @Override public void run() { String content = null; try { while((content = br.readLine()) != null){ System.out.println(content); } } catch (IOException e) { e.printStackTrace(); } } } public class App { private static final int SERVER_PORT=60000; public static void main(String[] args) throws IOException{ System.out.println("Hello World!"); Socket s = new Socket("192.168.1.120",SERVER_PORT); new Thread(new ClientThread(s)).start(); PrintStream ps = new PrintStream(s.getOutputStream()); String line = null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while((line = br.readLine())!=null){ ps.println(line); } } }
執行結果: