java实现聊天室功能(包含全部代码,有界面)

上传人:z****2 文档编号:50328394 上传时间:2022-01-20 格式:DOC 页数:19 大小:140KB
收藏 版权申诉 举报 下载
java实现聊天室功能(包含全部代码,有界面)_第1页
第1页 / 共19页
java实现聊天室功能(包含全部代码,有界面)_第2页
第2页 / 共19页
java实现聊天室功能(包含全部代码,有界面)_第3页
第3页 / 共19页
资源描述:

《java实现聊天室功能(包含全部代码,有界面)》由会员分享,可在线阅读,更多相关《java实现聊天室功能(包含全部代码,有界面)(19页珍藏版)》请在装配图网上搜索。

1、定义用户new服务器端代码:import java .n et.*;import javax.swi ng.*;public class Serverprivate static final int PORT=6666;G_Me nu gm=new G_Me nu();private ServerSocket server;public ArrayList list;public static String user;public static ArrayList list仁 new ArrayList();集合public User uu;public Server(Stri ng user

2、)this.user=user;public void getServer()list =new ArrayList();tryserver =new ServerSocket(PORT);(”服务器启动,开始监听 );while(true)Socket clie nt=server.accept();接收客户端线程Prin tWriterwriter=Prin tWriter(clie nt.getOutputStream();list.add(writer);Thread t = new Thread( new Chat(clie nt);t.start();catch(Exceptio

3、n ex)ex.pri ntStackTrace();public static void main(String args)new Server(user).getServer();class Chat impleme nts Runn ableSocket socket;private BufferedReader br;private String msg;private String mssg=;public Chat(Socket socket)try this.socket=socket;catch(Excepti on ex)ex.pri ntStackTrace();publi

4、c void run()BufferedReader( newtrybr=newelse if(msg.equals(10010)In putStreamReader(socket.get In putStream(); while(msg=br.readLi ne()!=null) if(msg.equals(1008611)匹配字符串 显示好友列表msg=br.readL in e();Stri ng st=msg.split(:);/将用户信息跟消息分隔开uu=new User(st0,st1,socket);将用户信息添加到User对象中Iist1.add(uu);将对象添加到用户集合

5、Iteratorit=Server.list1.iterator();/遍历用户集合while(it.hasNext()User use=it .n ext(); msg=use.getName()+(+use.getSex()+):;mssg+=msg;将所有的用户信息连接成一个字符串sen dMessage(1008611);显示好友列表匹配标识sendMessage(mssg);/ 群发消息显示说话消息msg=br.readL in e(); System.out.pri ntln( msg); se ndMessage(10010); sen dMessage(msg);else if

6、(msg.equals(10086)msg=br.readL in e(); System.out.pri ntln( msg); se ndMessage(10086); sen dMessage(msg);显示说话信息匹配标识显示进入聊天室进入聊天室匹配标识else if(msg.equals(841163574)私聊msg=br.readL in e();Stri ng rt=msg.split(1072416535);把传进来的用户信息跟说话内容分开在服务器端显示说话内容Stri ng tg=rt0.split(:);/因为是私聊,传过来两个用户的用户信息,这句作用是再把两个用户信息分

7、开遍历用户集合while(iu.hasNext()User se=i u.n ext();if(tg1.equals(se.getName()+(+se.getSex()+)如果传进来的用户信息跟集合中的用户信息吻合tryPrin tWriterpwriter= newPrin tWriter(se.getSock().getOutputStream();建立用户自己的流pwriter.pri ntln (841163574);/匹配标识pwriter.pri ntl n(rt1);向单独用户发送消息pwriter.flush();catch(Excepti on ex)ex.pri ntSt

8、ackTrace();else if(tgO.equals(se.getName()如果传进来的用户信息跟集合中的用户信息吻合tryPrin tWriterPrin tWriter(se.getSock().getOutputStream();pwr= new建立用户自己的流消息pwr.pri ntl n(841163574);匹配标识pwr.pri ntl n(rt1);向单独用户发送pwr.flush();System.out.pri ntl n(rt1);catch(Excepti on ex)ex.pri ntStackTrace();else if(msg.equals(456987

9、)下线msg=br.readL in e();System.out.pri ntln( msg);/se ndMessage(456987);在服务端显示信息匹配字符串sen dMessage(msg);/匹配完毕后群发消息Stri ng si=msg.split(:);/将传过来的用户名跟信息分隔开历用户集合lterator at=Server.list1.iterator();/while(at.hasNext()User sr=at. next();如果传过来if(sr.getName().equals(siO)的用户名跟用户集合里的用户吻合socketIist1.remove(sr);

10、 将吻合的用户移除 sr.getSock().close();关闭 此用户 的break;else if(msg.equals(123654)刷新Stri ng mssge=;遍历用户集合while(iter.hasNext()User uus=iter. next(); msg=uus.getName()+(+uus.getSex()+):;mssge+=msg;将所有的用户信息连接成一个字符 串sen dMessage(123654);发送刷新匹配标识sen dMessage(mssge);/ 群发消息catch(IOExcepti on ex)ex.pri ntStackTrace();

11、 public void sen dMessage(Stri ng message)/群发消息方法tryfor(Pri ntWriter pw:list)输出流集合pw.pri ntl n( message); pw.flush();catch(Excepti on ex)ex.pri ntStackTrace();客户端代码:import java .n et.*;public class Socket_ one/客户端private static final int PORT=6666;端口public static String user;public static Socket soc

12、ket;public Socket_ on e(Stri ng user)this.user=user;try建立 socket 连接(”【+user+】欢迎来到聊天室!”);Thread tt=new Thread(new Recove(socket,user);建立客户端线程tt.start();/ 启动线程catch(Exceptio n ex)ex.pri ntStackTrace();public static void main(String args) throws Exceptionnew Socket_ on e(user);class Recove impleme nts

13、Runn ablepublic String user;private Socket socket;private BufferedReader keybord;public BufferedReader br;private Prin tWriter pw;private String msg;G_Me nu gm=new G_Me nu();public Recove(Socket socket,Stri ng user) throws IOExcepti ontrythis.socket=socket;this.user=user;catch(Exceptio n ex)ex.pri n

14、tStackTrace();public void run()trybr=newBufferedReader( newIn putStreamReader(socket.get In putStream();while(msg=br.readLi ne()!=null)String message=msg;if(message.equals(1008611)匹配字符串 显示好友列表接收前清空好友列表清空 JCombox(” 所有人);message=br.readL in e();Stri ng str=message.split(:);/将接收到的所有用户信息分隔开for(Stri ng s

15、s:str)将所有用户信息添加到好友列表将所有用 户信息添加 到 JComboxelse if(message.equals(841163574)私聊message=br.readL in e();(”收到:+message); 在服务器端显示私聊消息gm.jta2 .ap pe nd(message+n);在我的频道显示私聊信息else if(message.equals(10010)显示说话消息message=br.readL in e();(”收到:+message);/ 在服务器端显示说话信息gm.jta1. appe nd(message+n);在公共频道显示说话信息gm.jta2.

16、 appe nd(message+n);在我的频道显示说话信息else if(message.equals(10086)message=br.readL in e();显示进入聊天室gm.jta1.appe nd(message+n);在公共频道显示进入聊天至信息gm.jta2.appe nd(message+n);在我的频道显示进入聊天至信息else if(message.equals(123654)gm.listModel1.clear();将好刷新F友列表清空gm.jcomb.removeAllltems();将JCombox清空gm.jcomb.addltem(” 所有人);messa

17、ge=br.readL in e();Stri ng sr=message.split(:);/将接收到的用户信息分隔开for(Stri ng sst:sr)将刷新后所有用户信息添加到好友列表gm.jcomb.addltem(sst);/将刷新后所有用户信息添加到 JCombox线信息线信息else if(message.equals(456987)message=br.readL in e();gm.jta1.appe nd(message+n);gm.jta2.appe nd(message+n);下线在公共频道显示用户下在我的频道显示用户下catch(IOExcepti on ex)ex

18、.pri ntStackTrace(); 登陆界面代码:import javax.swi ng.*;class Landen exte nds Frame impleme nts Actio nListe ner JFrame jf=new JFrame(”聊天登陆);JPa nel jp 仁new JPan el(); JPanel jp2=new JPa nel();JPanel jp3=new JPanel();JPa nel jp4=new JPan el();JLabel jl1= new JLabel( 姓名:);JLabel jl2=new JLabel(地址);JLabel j

19、l3=new JLabel(端口:);JRadioButton jrb仁new JRadioButto n(”男生);JRadioButton jrb2=new JRadioButto n(”女生);JRadioButton jrb3=new JRadioButt on (” 保密);public JTextField jtf1= new JTextField(10); public JTextField jtf2=new JTextField(10); public JTextField jtf3=new JTextField(10);JButton jb 仁new JButto n(”连接

20、);JButton jb2=new JButt on (”断开);TitledBorder tb=new TitledBorder();Butt on Group gb=new Butt on Group(); public void in it()/显示登录界面jb1.addActi on Liste ner(this);jb2.addActi on Liste ner(this);jpl.add(jll); jpl.add(jtfl); jpl.add(jrbl); jp1.add(jrb2); jp1.add(jrb3);jp2.add(jl2); jp2.add(jtf2);jp2.a

21、dd(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.setLocatio n(200, 200);jf.setSize(350, 200);jf.setResizable(false);jf.setDefault

22、CloseOperatio n( JFrame.DISPOSE_ON_CLOSE); jf.setVisible(true);事件触发public void action Performed(Acti onEvent even t)/jbl.setText(”连接);jb2.setText(”断开);String s1= null;if(event.getActionCommand().equals(”断开)System.exit(O);if(event.getActionCommand().equals(”连接)if(jtf1.getText().equals()请输入用户名!请选择性别!)

23、;JOpti onPan e.showMessageDialog( null,);elseif(!jrb1.isSelected( )& !jrb2.isSelected()&!jrb3.isSelected()JOpti onPan e.showMessageDialog( null,elsejf.setVisible(false);if(jrb1.isSelected()s仁boy;else if(jrb2.isSelected()s1=girl;else if(jrb3.isSelected()s仁secret;G_Me nu gmu=new G_Me nu();gmu.getMe nu

24、(jtf1.getText(),s1);gmu.sock();public class Log inpublic static void main(String args) new Landen( ).i nit();主界面代码:import javax.swi ng.*;import java .n et.*;class G_Me nu exte nds JFrame impleme nts Actio nListe ner JFrame jf=new JFrame(” 聊天室);public Socket_ one soc;public Prin tWriter pw;public JPa

25、 nel jp1= new JPa nel();public JPa nel jp2=new JPa nel();public JPa nel jp3=new JPa nel();public JPa nel jp4=new JPa nel();public JPa nel jp5=new JPa nel();public JPa nel jp6=new JPa nel();public JPa nel jp7=new JPa nel();public static JTextArea jta仁new JTextArea(12,42);public static JTextArea jta2=

26、new JTextArea(12,42);public JLabel jl1= new JLabel(对”);public static JComboBox jcomb=new JComboBox();public JCheckBox jcb=new JCheckBox( 私聊”);public JTextField jtf= new JTextField(36);public JButton jb仁new JButton(”发送 );public JButton jb2=new JButton(”刷新);public static DefaultListModel listModel1;pu

27、blic static JList lst1;public String na;public String se;public String message;显示聊天界面public void getMe nu (Stri ng n ame,Stri ng sex)/jcomb.addltem(” 所有人);this .na=n ame;this.se=sex;jta1.setEditable(false);jta2.setEditable(false);listModel仁 new DefaultListModel。;lst1 = new JList(listModel1);lst1.set

28、Selectio nM ode(ListSelectio nM odel.SINGLE_SELECTION); lst1.setVisibleRowCou nt(18);lst1.setFixedCellHeight(28); lst1.setFixedCellWidth(100);JScrollPane jsp1= new JScrollPane(jta1);JScrollPane jsp2=new JScrollPane(jta2);好友列表);JScrollPane jsp3=new JScrollPane(lst1);jsp3.setBorder( new TitledBorder(”

29、jsp1.setBorder(new TitledBorder(主聊天频道);jsp2.setBorder(new TitledBorder(我的频道);jp1.setLayout( new GridLayout(2,1);jpl.add(jspl);jp1.add(jsp2);jp2.setLayout (new FlowLayout(FlowLayout.LEFT);jp2.add(jl1);jp2.add(jcomb);jp2.add(jcb);jp3.setLayout (new FlowLayout(FlowLayout.LEFT);jp3.add(jtf);jp3.add(jb1)

30、;jp4.setLayout( new GridLayout(2,1);jp4.add(jp2);jp4.add(jp3);jp5.setLayout (new BorderLayout(); jp5.add(jp1,BorderLayout.NORTH); jp5.add(jp4,BorderLayout.SOUTH);jp6.setLayout (new BorderLayout(); jp6.add(jsp3,BorderLayout.NORTH); jp6.add(jb2,BorderLayout.SOUTH);jp7.setLayout (new FlowLayout(FlowLay

31、out.LEFT); jp7.add(jp5);jp7.add(jp6);jf.add(jp7);jf.setLocatio n(200,200);jf.setSize(700,650);jf.setResizable(false);jf.setDefaultCloseOperati on (JFrame.DO_NOTHING_ON_CLOSE); jf.setVisible(true);jb1.addActi on Liste ner(this);jb2.addActi on Liste ner(this);jtal.setL in eWrap(true);jta2.setL in eWra

32、p(true);jsp1.setVerticalScrollBarPolicy(ScrollPa neCo nsta nts.VERTICAL_SCROLL BAR_ALWAYS);jsp1.setHorizo ntalScrollBarPolicy(ScrollPa neCo nsta nts.HORIZONTAL_SC ROLLBAR_NEVER);jsp2.setVerticalScrollBarPolicy(ScrollPa neCo nsta nts.VERTICAL_SCROLL BAR_ALWAYS);jsp2.setHorizo ntalScrollBarPolicy(Scro

33、llPa neCo nsta nts.HORIZONTAL_SC ROLLBAR_NEVER);jsp3.setVerticalScrollBarPolicy(ScrollPa neCo nsta nts.VERTICAL_SCROLL BAR_ALWAYS);jsp3.setHorizo ntalScrollBarPolicy(ScrollPa neCo nsta nts.HORIZONTAL_SC ROLLBAR_NEVER);jf.pack();public void sock() tryString user= na+(+se+);将用户信息保存成字符串形式soc=new Socket

34、_ on e(user);/仓 U建客户端对象创建输出流pw.pri ntln (1008611);/ pw.pri ntln(n a+:+se);/ pw.flush();pw.pri ntl n( 10086);/发送好友列表标识发送用户信息发送进入聊天室标识pw.println(”【+na+ +进入聊天室);/发送进入聊天室信息pw.flush();catch(Exceptio n ex)ex.pri ntStackTrace();设置窗口关闭事件,如果点击窗口右上角叉号关闭,执public G_Menu() /行下边程序jf.addWi ndowListe ner( new Win d

35、owAdapter()public void wi ndowClos in g(Wi ndowEve nt e) try pw.pri ntln( 456987);/发送下线标识pw.println(na+:离开聊天室);/发送下线信息pw.flush();jf.dispose();关闭窗口catch(Excepti on ex) );public void action Performed(Acti onEvent eve nt)事件触发jb1.setText(发送 );jb2.setText(”刷新);tryif(event.getActionCommand().equals(”发送 )/

36、 点击发送触发if(!jtf.getText().equals()if(jcb.isSelected()String n ame1=(Stri ng)jcomb.getSelectedltem(); message=悄悄话+na+(+se+)+对+name1+说:+jtf.getText();pw.pri ntln (841163574);/发送私聊标识pw.pri ntln(n a+:+name1+1072416535+message);发送私聊信息pw.flush();elsepw.pri ntln (10010);/发送聊天标识pw.println(na+说:+jtf.getText()

37、;/发送聊天信pw.flush();刷新)/点击刷新else if(eve nt.getAct ion Comma nd().equals(”触发pw.pri ntl n( 123654);/发送刷新标识pw.flush();catch(Exceptio n ex)ex.pri ntStackTrace();jtf.setText();清空输入栏信息jtf.requestFocus(); 输入焦点实体类代码:class User用户姓名用户性别用户自己的socketprivate String n ame; private String sex;/ private Socket sock;/

38、public User(Stri ng n ame,Stri ng sex,Socket sock) setName( name); setSex(sex); setSock(sock); public String getName()return n ame;public void setName(Stri ng n ame)this .n ame=n ame;public String getSex()return sex;public void setSex(Stri ng sex)this.sex=sex;public Socket getSock()retur n sock;public void setSock(Socket sock) this.sock=sock;使用说明:1、先将所有的类都编译一下2、先运行服务器端代码3、再运行登录界面代码

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!