1.ServerSocket進行多線程接收
package com.yh.chat; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServerSocket { public static void main(String[] args) { // TODO Auto-generated method stub ServerSocket serversocket = null; Socket socket = null; try { serversocket = new ServerSocket(5005); while (true) { socket = serversocket.accept(); ChatAcceptSocket accept = new ChatAcceptSocket(socket); accept.start(); } // 發送信息 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.yh.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; public class ChatAcceptSocket extends Thread { private Socket socket; public ChatAcceptSocket(){} public ChatAcceptSocket(Socket socket){ this.socket=socket; } @Override public void run() { // TODO Auto-generated method stub InputStream is = null; BufferedReader br = null; // 接收信息 try { is = socket.getInputStream(); br = new BufferedReader(new InputStreamReader(is, "UTF-8")); String info = ""; while ((info = br.readLine()) != null) { OutputStream os = socket.getOutputStream(); byte[] replys = info.getBytes(); System.out.println("廣播:"+info); os.write(replys); os.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2.客戶端進行連接(代碼省略,參考:流式套接字:基於TCP協議的Socket網絡編程(案例1))
這里ServerSocket進行的廣播僅限當前線程的中的socket,不會給其他線程的socket發送數據。