1、 Socket client=server.accept();/接收客户端线程 PrintWriter writer = new PrintWriter(client.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 implemen
2、ts Runnable Socket socket; private BufferedReader br; private String msg; private String mssg=; public Chat(Socket socket) try this.socket=socket; catch(Exception ex) ex.printStackTrace(); public void run() br=new BufferedReader(new InputStreamReader(socket.getInputStream(); while(msg=br.readLine()!
3、=null) if(msg.equals(1008611)/匹配字符串 显示好友列表 msg=br.readLine(); String st=msg.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;/将所有
4、的用户信息连接成一个字符串 sendMessage(/显示好友列表匹配标识 sendMessage(mssg);/群发消息 else if(msg.equals(10010)/显示说话消息 System.out.println(msg);/显示说话信息匹配标识 sendMessage(msg); 10086)/显示进入聊天室/进入聊天室匹配标识841163574)/私聊 String rt=msg.split(1072416535/把传进来的用户信息跟说话内容分开 System.out.println(rt1);/在服务器端显示说话内容 String tg=rt0.split(/因为是私聊,传
5、过来两个用户的用户信息,这句作用是再把两个用户信息分开 iu=Server.list1.iterator(); while(iu.hasNext() User se=iu.next(); if(tg1.equals(se.getName()+se.getSex()+)/如果传进来的用户信息跟集合中的用户信息吻合 try PrintWriter pwriter=new PrintWriter(se.getSock().getOutputStream();/建立用户自己的流 pwriter.println(/匹配标识 pwriter.println(rt1);/向单独用户发送消息 pwriter.
6、flush(); System.out.println(rt1); catch(Exception ex) ex.printStackTrace(); else if(tg0.equals(se.getName()/如果传进来的用户信息跟集合中的用户信息吻合 PrintWriter pwr=new PrintWriter(se.getSock().getOutputStream(); pwr.println( pwr.println(rt1); pwr.flush(); 456987)/下线/在服务端显示信息/匹配字符串/匹配完毕后群发消息 String si=msg.split(/将传过来的
7、用户名跟信息分隔开 at=Server.list1.iterator(); while(at.hasNext() User sr=at.next(); if(sr.getName().equals(si0)/如果传过来的用户名跟用户集合里的用户吻合 list1.remove(sr);/将吻合的用户移除 sr.getSock().close();/关闭此用户的socket break;123654)/刷新 String mssge= iter=Server.list1.iterator(); while(iter.hasNext() User uus=iter.next(); msg=uus.g
8、etName()+uus.getSex()+ mssge+=msg; /发送刷新匹配标识 sendMessage(mssge); catch(IOException ex) public void sendMessage(String message)/群发消息方法 for(PrintWriter pw:list)/输出流集合 pw.println(message); pw.flush();客户端代码:public class Socket_one/客户端/端口 public static Socket socket; public Socket_one(String user) socket
9、=new Socket(127.0.0.1,PORT);/建立socket连接【+user+】欢迎来到聊天室! Thread tt=new Thread(new Recove(socket,user);/建立客户端线程 tt.start();/启动线程 catch(Exception ex) public static void main(String args) throws Exception new Socket_one(user);class Recove implements Runnable public String user; private Socket socket; pr
10、ivate BufferedReader keybord; public BufferedReader br; private PrintWriter pw; private String msg; public Recove(Socket socket,String user) throws IOException try this.socket=socket; public void run() br=new BufferedReader(new InputStreamReader(socket.getInputStream(); while(msg=br.readLine()! Stri
11、ng message=msg; if(message.equals( gm.listModel1.clear();/接收前清空好友列表 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 i
12、f(message.equals( System.out.println(收到:+message);/在服务器端显示私聊消息 gm.jta2.append(message+n/在我的频道显示私聊信息/在服务器端显示说话信息 gm.jta1.append(message+/在公共频道显示说话信息/在我的频道显示说话信息/在公共频道显示进入聊天室信息/在我的频道显示进入聊天室信息/将好友列表清空/将JCombox 清空 String sr=message.split(/将接收到的用户信息分隔开 for(String sst:sr) gm.listModel1.addElement(sst);/将刷
13、新后所有用户信息添加到好友列表 gm.jcomb.addItem(sst);/将刷新后所有用户信息添加到JCombox/在公共频道显示用户下线信息/在我的频道显示用户下线信息 catch(IOException ex)登陆界面代码:import java.awt.*;import java.awt.event.*;import javax.swing.border.*;class Landen extends Frame implements ActionListener JFrame jf=new JFrame(聊天登陆 JPanel jp1=new JPanel(); JPanel jp2
14、=new JPanel(); JPanel jp3=new JPanel(); JPanel jp4=new JPanel(); 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);
15、public JTextField jtf2=new JTextField(10); public 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(
16、jl1); jp1.add(jtf1); jp1.add(jrb1); jp1.add(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.
17、add(jrb2); gb.add(jrb3); jf.setLocation(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(jtf1.getText().equals( JOptionPane.showMessageDialog(null,请输入用户名! else if(!jrb1.isSelected()&!jrb2.isSelected()&jrb3.isSelected()请选择性别! else jf.setVisible(false); if(jrb1.isSelected() s1=boy else if(jrb2.isSelected()girl el
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1