1、java实现聊天室功能包含全部代码有界面服务器端代码:import .*;import java.io.*;import java.util.*;import java.util.concurrent.*;import javax.swing.*;public class Server private static final int PORT=6666; G_Menu gm=new G_Menu(); private ServerSocket server; public ArrayList list; public static String user; public static Arr
2、ayList list1=new ArrayList();/定义用户集合 public User uu; public Server(String user) this.user=user; public void getServer() list =new ArrayList(); try server=new ServerSocket(PORT); System.out.println(服务器启动,开始监听.); while(true) Socket client=server.accept();/接收客户端线程 PrintWriter writer = new PrintWriter(c
3、lient.getOutputStream(); list.add(writer); Thread t = new Thread(new Chat(client); t.start(); catch(Exception ex) ex.printStackTrace(); public static void main(String args) new Server(user).getServer(); class Chat implements Runnable Socket socket; private BufferedReader br; private String msg; priv
4、ate String mssg=; public Chat(Socket socket) try this.socket=socket; catch(Exception ex) ex.printStackTrace(); public void run() try br=new BufferedReader(new InputStreamReader(socket.getInputStream(); while(msg=br.readLine()!=null) if(msg.equals(1008611)/匹配字符串 显示好友列表 msg=br.readLine(); String st=ms
5、g.split(:);/将用户信息跟消息分隔开 uu=new User(st0,st1,socket);/将用户信息添加到User对象中 list1.add(uu);/将对象添加到用户集合 Iterator it=Server.list1.iterator();/遍历用户集合 while(it.hasNext() User use=it.next(); msg=use.getName()+(+use.getSex()+):; mssg+=msg;/将所有的用户信息连接成一个字符串 sendMessage(1008611);/显示好友列表匹配标识 sendMessage(mssg);/群发消息
6、else if(msg.equals(10010)/显示说话消息 msg=br.readLine(); System.out.println(msg); sendMessage(10010);/显示说话信息匹配标识 sendMessage(msg); else if(msg.equals(10086)/显示进入聊天室 msg=br.readLine(); System.out.println(msg); sendMessage(10086);/进入聊天室匹配标识 sendMessage(msg); else if(msg.equals(841163574)/私聊 msg=br.readLine
7、(); String rt=msg.split(1072416535);/把传进来的用户信息跟说话内容分开 System.out.println(rt1);/在服务器端显示说话内容 String tg=rt0.split(:);/因为是私聊,传过来两个用户的用户信息,这句作用是再把两个用户信息分开 Iterator iu=Server.list1.iterator();/遍历用户集合 while(iu.hasNext() User se=iu.next(); if(tg1.equals(se.getName()+(+se.getSex()+)/如果传进来的用户信息跟集合中的用户信息吻合 try
8、 PrintWriter pwriter=new PrintWriter(se.getSock().getOutputStream();/建立用户自己的流 pwriter.println(841163574);/匹配标识 pwriter.println(rt1);/向单独用户发送消息 pwriter.flush(); System.out.println(rt1); catch(Exception ex) ex.printStackTrace(); else if(tg0.equals(se.getName()/如果传进来的用户信息跟集合中的用户信息吻合 try PrintWriter pwr
9、=new PrintWriter(se.getSock().getOutputStream();/建立用户自己的流 pwr.println(841163574);/匹配标识 pwr.println(rt1);/向单独用户发送消息 pwr.flush(); System.out.println(rt1); catch(Exception ex) ex.printStackTrace(); else if(msg.equals(456987)/下线 msg=br.readLine(); System.out.println(msg);/在服务端显示信息 sendMessage(456987);/匹
10、配字符串 sendMessage(msg);/匹配完毕后群发消息 String si=msg.split(:);/将传过来的用户名跟信息分隔开 Iterator at=Server.list1.iterator();/遍历用户集合 while(at.hasNext() User sr=at.next(); if(sr.getName().equals(si0)/如果传过来的用户名跟用户集合里的用户吻合 list1.remove(sr);/将吻合的用户移除 sr.getSock().close();/关闭此用户的socket break; else if(msg.equals(123654)/刷
11、新 String mssge=; Iterator iter=Server.list1.iterator();/遍历用户集合 while(iter.hasNext() User uus=iter.next(); msg=uus.getName()+(+uus.getSex()+):; mssge+=msg;/将所有的用户信息连接成一个字符串 sendMessage(123654);/发送刷新匹配标识 sendMessage(mssge);/群发消息 catch(IOException ex) ex.printStackTrace(); public void sendMessage(Strin
12、g message)/群发消息方法 try for(PrintWriter pw:list)/输出流集合 pw.println(message); pw.flush(); catch(Exception ex) ex.printStackTrace(); 客户端代码:import .*;import java.io.*;import java.util.*;import java.util.concurrent.*;public class Socket_one/客户端 private static final int PORT=6666;/端口 public static String us
13、er; public static Socket socket; public Socket_one(String user) this.user=user; try socket=new Socket(127.0.0.1,PORT);/建立socket连接 System.out.println(【+user+】欢迎来到聊天室!); Thread tt=new Thread(new Recove(socket,user);/建立客户端线程 tt.start();/启动线程 catch(Exception ex) ex.printStackTrace(); public static void
14、main(String args) throws Exception new Socket_one(user); class Recove implements Runnable public String user; private Socket socket; private BufferedReader keybord; public BufferedReader br; private PrintWriter pw; private String msg; G_Menu gm=new G_Menu(); public Recove(Socket socket,String user)
15、throws IOException try this.socket=socket; this.user=user; catch(Exception ex) ex.printStackTrace(); public void run() try br=new BufferedReader(new InputStreamReader(socket.getInputStream(); while(msg=br.readLine()!=null) String message=msg; if(message.equals(1008611)/匹配字符串 显示好友列表 gm.listModel1.cle
16、ar();/接收前清空好友列表 gm.jcomb.removeAllItems();/清空JCombox gm.jcomb.addItem(所有人); message=br.readLine(); String str=message.split(:);/将接收到的所有用户信息分隔开 for(String ss:str) gm.listModel1.addElement(ss);/将所有用户信息添加到好友列表 gm.jcomb.addItem(ss);/将所有用户信息添加到JCombox else if(message.equals(841163574)/私聊 message=br.readL
17、ine(); System.out.println(收到:+message);/在服务器端显示私聊消息 gm.jta2.append(message+n);/在我的频道显示私聊信息 else if(message.equals(10010)/显示说话消息 message=br.readLine(); System.out.println(收到:+message);/在服务器端显示说话信息 gm.jta1.append(message+n);/在公共频道显示说话信息 gm.jta2.append(message+n);/在我的频道显示说话信息 else if(message.equals(100
18、86)/显示进入聊天室 message=br.readLine(); gm.jta1.append(message+n);/在公共频道显示进入聊天室信息 gm.jta2.append(message+n);/在我的频道显示进入聊天室信息 else if(message.equals(123654)/刷新 gm.listModel1.clear();/将好友列表清空 gm.jcomb.removeAllItems();/将JCombox 清空 gm.jcomb.addItem(所有人); message=br.readLine(); String sr=message.split(:);/将接收
19、到的用户信息分隔开 for(String sst:sr) gm.listModel1.addElement(sst);/将刷新后所有用户信息添加到好友列表 gm.jcomb.addItem(sst);/将刷新后所有用户信息添加到JCombox else if(message.equals(456987)/下线 message=br.readLine(); gm.jta1.append(message+n);/在公共频道显示用户下线信息 gm.jta2.append(message+n);/在我的频道显示用户下线信息 catch(IOException ex) ex.printStackTrac
20、e(); 登陆界面代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import javax.swing.border.*;class Landen extends Frame implements ActionListener JFrame jf=new JFrame(聊天登陆); JPanel jp1=new JPanel(); JPanel jp2=new JPanel(); JPanel jp3=new JPanel(); JPanel jp4=new JPanel(
21、); JLabel jl1=new JLabel(姓名:); JLabel jl2=new JLabel(地址:); JLabel jl3=new JLabel(端口:); JRadioButton jrb1=new JRadioButton(男生); JRadioButton jrb2=new JRadioButton(女生); JRadioButton jrb3=new JRadioButton(保密); public JTextField jtf1=new JTextField(10); public JTextField jtf2=new JTextField(10); public
22、JTextField jtf3=new JTextField(10); JButton jb1=new JButton(连接); JButton jb2=new JButton(断开); TitledBorder tb=new TitledBorder(); ButtonGroup gb=new ButtonGroup(); public void init()/显示登录界面 jb1.addActionListener(this); jb2.addActionListener(this); jp1.add(jl1); jp1.add(jtf1); jp1.add(jrb1); jp1.add(
23、jrb2); jp1.add(jrb3); jp2.add(jl2); jp2.add(jtf2); jp2.add(jl3); jp2.add(jtf3); jp3.add(jb1); jp3.add(jb2); jp4.setLayout(new GridLayout(3,1); jp4.add(jp1); jp4.add(jp2); jp4.add(jp3); jf.add(jp4); jtf2.setText(localhost); jtf3.setText(6666); gb.add(jrb1); gb.add(jrb2); gb.add(jrb3); jf.setLocation(
24、200, 200); jf.setSize(350, 200); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); jf.setVisible(true); public void actionPerformed(ActionEvent event)/事件触发 jb1.setText(连接); jb2.setText(断开); String s1=null; if(event.getActionCommand().equals(断开) System.exit(0); if(event.ge
25、tActionCommand().equals(连接) if(jtf1.getText().equals() JOptionPane.showMessageDialog(null,请输入用户名!); else if(!jrb1.isSelected()&!jrb2.isSelected()&!jrb3.isSelected() JOptionPane.showMessageDialog(null,请选择性别!); else jf.setVisible(false); if(jrb1.isSelected() s1=boy; else if(jrb2.isSelected() s1=girl;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1