java多人聊天

2023-12-13 17:05:38

服务端

package 多人聊天;
?
?
?
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Gserver implements Runnable {
?? ?private int Port = 9999;
?? ?private ServerSocket SS;
?? ?private Socket socket;
?? ?private ArrayList clients = new ArrayList(); ?//保存客户端线程
?? ?public Gserver(){
?? ??? ?try{?? ??? ??? ?
?? ??? ??? ?SS = new ServerSocket(Port);
?? ??? ??? ?new Thread(this).start();
?? ??? ?}catch(Exception ex){?? ??? ?
?? ??? ?}?? ??? ?
?? ?}
?? ?public void run(){
?? ??? ?try{
?? ??? ??? ?while(true){
?? ??? ??? ??? ?socket = SS.accept();
?? ??? ??? ??? ?ChatThread ct = new ChatThread(socket);
?? ??? ??? ??? ?clients.add(ct);
?? ??? ??? ??? ?ct.start();
?? ??? ??? ?}?? ??? ??? ?
?? ??? ?}catch(Exception ex){?? ?
?? ??? ?}
?? ?}
?? ?class ChatThread extends Thread{
?? ??? ?private Socket s;
?? ??? ?private InputStream is;
?? ??? ?private OutputStream os;
?? ??? ?private BufferedReader br;
?? ??? ?private PrintStream ps;
?? ??? ?public ChatThread(Socket socket) throws Exception{
?? ??? ??? ?this.s = socket;
?? ??? ??? ?is = this.s.getInputStream();
?? ??? ??? ?os = this.s.getOutputStream();?
?? ??? ??? ?br = new BufferedReader(new InputStreamReader(is));
?? ??? ??? ?ps = new PrintStream(os);
?? ??? ?}
?? ??? ?public void run(){
?? ??? ??? ?try{
?? ??? ??? ??? ?while(true){
?? ??? ??? ??? ??? ?String str = br.readLine();?? ?
?? ??? ??? ??? ??? ?sendMessage(str);
?? ??? ??? ??? ?}
?? ??? ??? ?}catch (Exception ex){
?? ??? ??? ?}
?? ??? ?}
?? ??? ?public void sendMessage(String str){
?? ??? ??? ?for(int i=0; i<clients.size(); i++){
?? ??? ??? ??? ?ChatThread ct = (ChatThread)clients.get(i);
?? ??? ??? ??? ?ct.ps.println(str);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?public static void main(String[] args){
?? ??? ?new Gserver();
?? ?}
}

客户端

package 多人聊天;
?
?
?
?
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Gclient extends JFrame implements ActionListener, Runnable {
?? ?private Socket socket;
?? ?private int Port = 9999;
?? ?private InetAddress ip;
?? ?private String name;
?? ?
?? ?private JTextArea area = new JTextArea("以下是聊天内容:\n");
?? ?private JTextField field = new JTextField("");
?? ?
?? ?public Gclient(){
?? ??? ?this.setTitle("客户端");
?? ??? ?this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?? ??? ?this.add(field,BorderLayout.NORTH);
?? ??? ?field.addActionListener(this);
?? ??? ?this.add(area, BorderLayout.CENTER);?? ??? ?
?? ??? ?this.setSize(240, 260);
?? ??? ?this.setVisible(true);
?? ??? ?name = JOptionPane.showInputDialog("输入昵称:");
?? ??? ?try{
?? ??? ??? ?ip = InetAddress.getByName("Localhost");
?? ??? ??? ?socket = new Socket(ip,Port);
?? ??? ??? ?JOptionPane.showMessageDialog(this, "连接成功");
?? ??? ??? ?this.setTitle("客户端:" + name);
?? ??? ??? ?new Thread(this).start();
?? ??? ?}catch (Exception ex){?? ??? ??? ?
?? ??? ?}
?? ?}
?? ?public void run(){
?? ??? ?try{
?? ??? ??? ?while(true){
?? ??? ??? ??? ?InputStream is = socket.getInputStream();
?? ??? ??? ??? ?BufferedReader bf = new BufferedReader(new InputStreamReader(is));
?? ??? ??? ??? ?String str = bf.readLine();
?? ??? ??? ??? ?area.append(str + '\n');
?? ??? ??? ?}
?? ??? ?}catch (Exception ex){?? ?
?? ??? ?}
?? ?}
?? ?public void actionPerformed(ActionEvent e){
?? ??? ?try{
?? ??? ??? ?OutputStream os = socket.getOutputStream();
?? ??? ??? ?PrintStream ps = new PrintStream(os);
?? ??? ??? ?ps.println(name + "说:" + field.getText());
?? ??? ??? ?field.setText("");
?? ??? ?}catch (Exception ex){?? ??? ??? ?
?? ??? ?}
?? ?}
?? ?public static void main(String[] args) {
?? ??? ?new Gclient();
?? ?}
}

文章来源:https://blog.csdn.net/qq_73086324/article/details/134953275
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。