使用Socket模拟聊天室
生活随笔
收集整理的這篇文章主要介紹了
使用Socket模拟聊天室
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Socket模擬聊天室
文章目錄
- 使用Socket模擬聊天室
- 客戶端
- 客戶端讀線程
- 客戶端寫線程
- 客戶主函數
- 服務端
- 服務端線程
- 服務端主函數
客戶端
客戶端讀線程
public class EchoClientReadThread implements Runnable{private Socket socket;private BufferedReader in;public EchoClientReadThread(Socket socket,BufferedReader in){this.in = in;this.socket = socket;}@Overridepublic void run() {try {String str = null;while ((str = in.readLine()) != null){System.out.println(str);}} catch (IOException e) {e.printStackTrace();}} }客戶端寫線程
public class EchoClientWriteThread implements Runnable{private PrintWriter out;private Socket socket;Scanner scanner;public EchoClientWriteThread(Socket socket,PrintWriter out,Scanner scanner){this.scanner = scanner;this.out = out;this.socket = socket;}@Overridepublic void run() {String data =null;while ((data=scanner.nextLine())!=null){out.println(data);}} }客戶主函數
public class EchoClient {public static void main(String[] args) {String host = "127.0.0.1";int port = 12345;try {Socket socket = new Socket(host,port);PrintWriter out = new PrintWriter(socket.getOutputStream(),true);Scanner scanner = new Scanner(System.in);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));Thread t1 = new Thread(new EchoClientReadThread(socket,in));Thread t2 = new Thread(new EchoClientWriteThread(socket,out,scanner));t1.start();t2.start();} catch (IOException e) {e.printStackTrace();}} }服務端
服務端線程
public class EchoServerThread implements Runnable{private ArrayList<Socket> socketarr ;private Socket socket;public EchoServerThread(ArrayList Socketarr,Socket socket){this.socketarr = Socketarr;this.socket = socket;}@Overridepublic void run() {try {InetSocketAddress address = (InetSocketAddress) socket.getRemoteSocketAddress();BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String data = null;while ((data= in.readLine())!=null){System.out.println("來自:"+address.getHostName()+":"+address.getPort()+"的信息:"+data);for (Socket s:socketarr){PrintWriter out = new PrintWriter(s.getOutputStream(),true);out.println("來自:"+address.getHostName()+":"+address.getPort()+"的信息:"+data);}}} catch (IOException e) {e.printStackTrace();}} }服務端主函數
public class EchoServer {public static void main(String[] args) {int port = 12345;try {ArrayList<Socket> arrayList = new ArrayList<>();ServerSocket sst = new ServerSocket(port);while (true) {Socket ssc = sst.accept();InetSocketAddress address = (InetSocketAddress) ssc.getRemoteSocketAddress();System.out.println(address.getHostName()+":"+address.getPort()+"已連接");arrayList.add(ssc);new Thread(new EchoServerThread(arrayList, ssc)).start();}} catch (IOException e) {e.printStackTrace();}} }總結
以上是生活随笔為你收集整理的使用Socket模拟聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。