使用Java实现的简单聊天室 仿QQ 群聊

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本文档由donaldjohn编写,联系方式:donaldjohn@qq.com/163.com/sina.com/sohu.com/live.cn1本人博客聊天室详解一.客户端的构成:客服端由Login.java,Login.java,LongConnection.java1.Login负责登陆,其界面如下,界面上的部件不赘述.Login的源码如下:packageclient;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.BorderFactory;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextField;importjavax.swing.border.TitledBorder;publicclassLoginextendsJFrame{/***登陆窗口*/privatestaticfinallongserialVersionUID=1L;本文档由donaldjohn编写,联系方式:donaldjohn@qq.com/163.com/sina.com/sohu.com/live.cn2本人博客初始化各组件privatevoidinit(){jLabel1=newJLabel();jLabel2=newJLabel();jLabel3=newJLabel();jLabel1.setText(用户名);jLabel2.setText(服务器);jLabel3.setText(端口号);userName=newJTextField();serverAddress=newJTextField();port=newJTextField();userName.setColumns(20);serverAddress.setColumns(20);port.setColumns(20);userName.setText(donaldjohn);serverAddress.setText(localhost);port.setText(5000);jLogin=newJButton();jReset=newJButton();jLogin.setText(登陆);jReset.setText(重置);jLogin.setText(登陆);jReset.setText(重置);//为登陆按钮注册监听事件jLogin.addActionListener(newActionListener(){本文档由donaldjohn编写,联系方式:donaldjohn@qq.com/163.com/sina.com/sohu.com/live.cn3本人博客@OverridepublicvoidactionPerformed(ActionEvente){Login.this.excute(e);}});//为重置按钮注册监听事件jReset.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){Login.this.reset(e);}});panel=newJPanel();panel.add(jLabel1);panel.add(userName);panel.add(jLabel2);panel.add(serverAddress);panel.add(jLabel3);panel.add(port);panel.add(jLogin);panel.add(jReset);panel.setBorder(BorderFactory.createTitledBorder(null,用户登陆,TitledBorder.LEFT,TitledBorder.ABOVE_TOP,newFont(Font.DIALOG,Font.ITALIC,20),Color.RED));this.setAlwaysOnTop(true);this.setVisible(true);this.setSize(300,200);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.getContentPane().add(panel);this.setResizable(false);}本文档由donaldjohn编写,联系方式:donaldjohn@qq.com/163.com/sina.com/sohu.com/live.cn4本人博客负责重置的处理程序privatevoidreset(ActionEvente){userName.setText(null);serverAddress.setText(null);port.setText(5000);}//登陆按钮具体的处理程序privatevoidexcute(ActionEvente){//新建登陆进程,处理登陆相关的事宜newLoginConnection(userName.getText(),serverAddress.getText(),Integer.parseInt(port.getText()),this);}publicLogin(Stringname){super(name);this.init();}publicstaticvoidmain(String[]args){newLogin(登陆);}}2.LoginConnection.java该类是登陆进程类,负责处理登陆的相关事宜,源码如下:packageclient;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.List;importjavax.swing.JOptionPane;本文档由donaldjohn编写,联系方式:donaldjohn@qq.com/163.com/sina.com/sohu.com/live.cn5本人博客{privateStringuserName;privateStringserverAddress;privateintport;privateLoginlogin;privateInputStreamis;privateOutputStreamos;privateChattingchatting;privateSocketsocket;//LoginConnection的构造方法,在此构造方法中,调用本类的connect2Server()方法,如果成功连接,则继续调用login()方法,与主机进行相关交互.具体查看login()方法注释.publicLoginConnection(StringuserName,StringserverAddress,intport,Loginlogin){this.userName=userName;this.serverAddress=serverAddress;this.port=port;this.login=login;//持有login的引用,为的是能够以login为parent组件,弹出提//示对话框.if(this.connect2Server(serverAddress,port))this.login();}//负责连接到服务器端,初始化,socket和输入输出流.失败弹出消息对话框.privatebooleanconnect2Server(StringserverAddress,intport){try{this.socket=newSocket(serverAddress,port);is=socket.getInputStream();os=socket.getOutputStream();returntrue;}catch(Exceptione){JOptionPane.showMessageDialog(login,服务器可能还没启动,请确定服务器正常,无法连接到服务器,JOptionPane.ERROR_MESSAGE);returnfalse;}}本文档由donaldjohn编写,联系方式:donaldjohn@qq.com/163.com/sina.com/sohu.com/live.cn6本人博客(){returnuserName;}publicInputStreamgetIs(){returnis;}publicOutputStreamgetOs(){returnos;}//连接服务器成功,处理服务器发来的链接验证信息.如果验证通过(无重名用户)隐藏//Login窗口,弹出聊天窗口privatevoidlogin(){try{Stringinfo=XMLUtil.constructLoginXML(userName);os.write(info.getBytes());byte[]buf=newbyte[5000];intlength=is.read(buf);Stringresponse=newString(buf,0,length);Stringresult=XMLUtil.extractResult(response);if(success.equals(result)){this.login.setVisible(false);this.chatting=newChatting(聊天室,this);System.out.println(response);this.start();}else{JOptionPane.showMessageDialog(this.login,用户名已经存在,请重新输入,登陆结果,J

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功