日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

一对多聊天系统

發(fā)布時間:2023/12/20 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一对多聊天系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一對多聊天系統(tǒng)

在上一篇博客中,我們寫了一個基于TCP的客戶端和服務(wù)器的一對一雙向聊天系統(tǒng),但只能開一個客戶端與服務(wù)器通信,我們在之前的代碼做一些改動,就實現(xiàn)了多個客戶端與服務(wù)器通信的系統(tǒng),且服務(wù)器能向所有客戶端發(fā)送廣播!

代碼示例

創(chuàng)建服務(wù)器

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;public class Server extends JFrame implements ActionListener {PrintWriter pw;BufferedReader br;JTextArea jta;JTextField jtf;JButton jb;JPanel jp;JScrollPane jsp;ArrayList<Socket> sockets;ServerSocket ss;public static void main(String[] args) {new Server();}public Server() {jta = new JTextArea();jsp = new JScrollPane(jta);jtf = new JTextField(15);jb = new JButton("發(fā)送");jb.addActionListener(this);jp = new JPanel();jp.add(jtf);jp.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(jp, BorderLayout.SOUTH);this.setSize(300, 200);this.setTitle("服務(wù)器");this.setVisible(true);new Thread(new Runnable() {@Overridepublic void run() {try {ss = new ServerSocket(10000);//存放客戶端連接來的Socketsockets = new ArrayList<>();while (true) {Socket socket = ss.accept();sockets.add(socket);jta.append("客戶端已成功連接服務(wù)器\n");Thread t = new Thread(new GetClientToServerMessage(Server.this, socket));t.start();}} catch (IOException e) {e.printStackTrace();}}}).start();}@Overridepublic void actionPerformed(ActionEvent e) {// 發(fā)送try {String str = jtf.getText();for (Socket socket : sockets) {pw = new PrintWriter(socket.getOutputStream(), true);pw.println(str);pw.flush();}jta.append("服務(wù)器廣播:" + str + "\n");jtf.setText("");} catch (IOException e1) {e1.printStackTrace();}}public void read(Socket socket) {try {while (true) {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));jta.append(br.readLine() + "\n");}} catch (IOException e) {e.printStackTrace();}} }

創(chuàng)建服務(wù)器接收客戶端消息的線程類

import java.net.Socket;public class GetClientToServerMessage implements Runnable {private Server server;private Socket socket;public GetClientToServerMessage(Server server,Socket socket) {this.server = server;this.socket = socket;}@Overridepublic void run() { server.read(socket);} }

創(chuàng)建Client類

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;public class Client extends JFrame implements ActionListener {Socket s;PrintWriter pw;BufferedReader br;JTextArea jta;JTextField jtf;JButton jb;JPanel jp;JScrollPane jsp;JOptionPane jop;String username;public static void main(String[] args) {new Client();}public Client() {jta = new JTextArea();jsp = new JScrollPane(jta);jtf = new JTextField(15);jb = new JButton("發(fā)送");jb.addActionListener(this);jp = new JPanel();jp.add(jtf);jp.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(jp, BorderLayout.SOUTH);this.setSize(300, 200);username = JOptionPane.showInputDialog("請輸入用戶名"); this.setTitle("客戶端"+username);this.setVisible(true);try {s = new Socket("127.0.0.1", 10000);jta.append("您已成功連接服務(wù)器\n");Thread t = new Thread(new GetServerToClientMessage(Client.this));t.start();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {try {pw = new PrintWriter(s.getOutputStream(), true);String str = jtf.getText();jta.append(username+"說:" + str + "\n");pw.println(username+"說:"+str);pw.flush();jtf.setText("");} catch (IOException e1) {e1.printStackTrace();}}public void read(){try {while (true) {br = new BufferedReader(new InputStreamReader(s.getInputStream()));jta.append("服務(wù)器回復(fù)說:" + br.readLine()+ "\n");}} catch (IOException e) {e.printStackTrace();}} }

創(chuàng)建接收服務(wù)器消息的線程類

public class GetServerToClientMessage implements Runnable {private Client client;public GetServerToClientMessage(Client client) {this.client = client;}@Overridepublic void run() {client.read();} }

運行結(jié)果



總結(jié)

以上是生活随笔為你收集整理的一对多聊天系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。