1、JAVA聊天室1Java聊天室要求:(1) 登录聊天室(进入聊天室必须输入用户名和密码,没有用户名的用户必须申请注册。)(2) 在文件中保留所有聊天记录。(3) 用户应该可以看到所有在线的其它用户,并和该用户聊天。(4) 系统应该能够提示有新用户进入和用户退出等信息。其它功能可任意自行设计。1、问题描述文档对作业问题的详细描述,包括:你要解决一个什么样的问题,这个问题给你提出了什么样的要求。2、总体设计文档:对你要实现的系统的总体设计,包括:你系统的系统结构和体系框架;系统中所有对象的概要设计(如对象的主要职责和对象之间的相互关系);系统主要的控制流程;系统中重要的功能流程设计等内容。3、源代
2、码及详细设计文档:源代码应该满足小组规定的源代码规范,包括命名规范,缩进对齐规范,注释规范等等。源代码的注释应丰富并且有实用。详细设计文档中应该对本系统中关键的问题或者你认为自己最满意的设计内容做详细的说明和归纳性总结。4、可执行程序及其使用说明文档:在检查时程序时可以方便的运行。使用说明文档必须详细的介绍如何安装、运行、检查你所完成的程序。5、人员组成及任务划分说明:要详细说明人员的任务划分情况,同时注意,你们的源代码和设计文档中也应该有分工情况的详细记录,比如说一个类是由谁实现的,和谁完成的,谁做过什么样的修改等。JAVA聊天室系统1、问题描述JAVA聊天室是用java applicati
3、on 程序实现的,由客户端和服务器端组成。先启动服务器端,再启动服务器端,服务器验证身份后客户便可登陆聊天室。客户聊天时可选择聊天对象私聊,也可以公聊。客户登陆和退出聊天室时都会提示相关信息。1、 总体设计界面设计:聊天室界面大小为600*450;登陆对话框界面大小为250*200;布局:主要体现在客户端。进入聊天室主界面之前有一个登陆对话框。其中包括服务器ip,用户名和密码的填写。聊天室的主界面主要分为两个大容器,中间是textViewTalk文本区域,显示聊天信息。南部是一个控制界面,包括发送按钮,聊天信息输入框,在线人员组合框以及一些标签。 系统结构:服务器端java ChatServe
4、r 包括主类ChatServer 和 ServerThread 客户端 java ChatClient 包括主类ChatClient 和ClientThread 主要对象及其关系服务器端主要类:ChatServer /主类ServerThread /处理客户端消息的线程类对象主要对象:ServerSocket serverSocket; /服务器插口对象 private Socket socket; /定义客户端套接字 private BufferedReader in; / 定义输入流 private PrintWriter out; / 定义输出流 private static Vecto
5、r onlineUser; private static Vector socketUser; private String strReceive, strKey; private StringTokenizer st;客户端主要类:ChatClient /主类ClientThread /处理聊天情境的类ChatClient中主要对象:JFrame frame; /窗口类对象聊天室主窗口 JDialog dialogLogin; /登陆对话框 JPanel panelLogin; JPanel panelBack; JPanel panelTalk; JLabel labelServerIP;
6、 JLabel labelName; JLabel labelPassword; JLabel labelTalk; JLabel labelTo; JTextArea textViewTalk; /显示聊天内容的文本区 JTextField textTalk; JTextField textServerIP; JTextField textName; JPasswordField textPassword; JButton buttonSend; JButton buttonLogin; JButton buttonReg; JComboBox listOnline; GridBagLayo
7、ut gl; BorderLayout bdl; GridBagConstraints gbc; Socket socket; /客户端插口对象 BufferedReader in; PrintWriter out; String strSend, strReceive, strKey, strStatus;private StringTokenizer st;ClientThread中主要对象 private Socket socket; /客户端插口对象 private BufferedReader in; /输入流 private PrintWriter out; /输出流 privat
8、e String strReceive, strKey; private Thread threadTalk; private StringTokenizer st;2、 源代码及详细设计/*源代码*/* -类 名 称:ChatServer程序简介:创建一个聊天室监听服务,与客户端建立联系 -*/import java.awt.event.*;import java.io.*;import .*;import java.util.*;public class ChatServer ServerSocket serverSocket; / 创建服务器端套接字 private final int
9、SERVER_PORT = 8049; /定义端口号 public ChatServer() try serverSocket=new ServerSocket(SERVER_PORT); / 启动服务 System.out.println(Server started.); System.out.println(Server port is:+SERVER_PORT); getIP(); / 得到并显示服务器端IP while(true) Socket socket=serverSocket.accept(); / 监听客户端的连接请求,并返回客户端socket new ServerThre
10、ad(socket); / 创建一个新线程来处理与该客户的通讯 catch(IOException e) System.out.println(ERROR Cound not start server.+e); / 得到服务器IP地址并显示 public void getIP() try InetAddress localAddress = InetAddress.getLocalHost(); byte ipAddress = localAddress.getAddress(); System.out.println(Server IP is:+(ipAddress0&0xff)+.+(ip
11、Address1&0xff)+.+ (ipAddress2&0xff)+.+(ipAddress3&0xff); catch(Exception e) System.out.println(ERROR Cound not get IP.+e); / 实例化服务器端程序 public static void main(String args) new ChatServer(); /* -类 名 称:ServerThread程序简介:接收到客户端socket发来的信息后进行解析、处理、转发。-*/class ServerThread extends Thread private Socket so
12、cket;/定义客户端套接字 private BufferedReader in;/ 定义输入流 private PrintWriter out;/ 定义输出流 private static Vector onlineUser = new Vector(10,5); private static Vector socketUser = new Vector(10,5); private String strReceive, strKey; private StringTokenizer st; private final String USERLIST_FILE = D:Java大作业聊天室u
13、ser.txt; /设定存放用户信息的文件 public ServerThread(Socket client) throws IOException socket = client; in=new BufferedReader(new InputStreamReader(socket.getInputStream(); /客户端接收 out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);/客户端输出 this.start(); public void run()
14、 trywhile(true) strReceive = in.readLine();/从服务器端接收一条信息后拆分、解析,并执行相应操作 st = new StringTokenizer(strReceive,|); strKey = st.nextToken(); if(strKey.equals(login) login(); else if(strKey.equals(talk) talk(); else if(strKey.equals(init) initClientOnline(); else if(strKey.equals(reg) register(); catch(IOE
15、xception e) /用户关闭客户端造成此异常,关闭该用户套接字。 String leaveUser = closeSocket(); System.out.println(SYSTEM + leaveUser + leave chatroom!); sendAll(talk|+leaveUser+ 恋恋不舍的离开了聊天室。); / 判断是否有该注册用户 private boolean isExistUser(String name) String strRead; try FileInputStream inputfile = new FileInputStream(USERLIST_F
16、ILE); / create input stream DataInputStream inputdata=new DataInputStream(inputfile); while(strRead=inputdata.readLine()!=null) StringTokenizer stUser = new StringTokenizer(strRead,|); if(stUser.nextToken().equals(name) return true; catch(FileNotFoundException fn) System.out.println(ERROR User File
17、has not exist!+fn); out.println(warning|读写文件时出错!); catch(IOException ie) System.out.println(ERROR +ie); out.println(warning|读写文件时出错!); return false; / 判断用户的用户名密码是否正确 private boolean isUserLogin(String name,String password) String strRead; try FileInputStream inputfile = new FileInputStream(USERLIST_
18、FILE); / create input stream DataInputStream inputdata=new DataInputStream(inputfile); while(strRead=inputdata.readLine()!=null) if(strRead.equals(name+|+password) return true; catch(FileNotFoundException fn) System.out.println(ERROR User File has not exist!+fn); out.println(warning|读写文件时出错!); catch
19、(IOException ie) System.out.println(ERROR +ie); out.println(warning|读写文件时出错!); return false; / 用户注册 private void register() throws IOException String name = st.nextToken(); /得到用户名称 String password = st.nextToken().trim();/得到用户密码 if(isExistUser(name) System.out.println(ERROR +name+ Register fail!); o
20、ut.println(warning|该用户已存在,请改名!); else RandomAccessFile userFile=new RandomAccessFile(USERLIST_FILE,rw); userFile.seek(userFile.length(); / 在文件尾部加入新用户信息 userFile.writeBytes(name+|+password+rn); longin(name); /自动登陆聊天室 / 用户登陆(从登陆框直接登陆) private void login() throws IOException String name = st.nextToken(
21、); /得到用户名称 String password = st.nextToken().trim();/得到用户密码 boolean succeed = false; System.out.println(USER LOGIN +name+:+password+:+socket); for(int i=0;i欢迎 +name+ 进来与我们一起交谈!); System.out.println(SYSTEM +name+ login succeed!); / 聊天信息处理 private void talk() throws IOException String strTalkInfo = st.
22、nextToken(); /得到聊天内容; String strSender = st.nextToken(); /得到发消息人 String strReceiver = st.nextToken(); /得到接收人 System.out.println(TALK_+strReceiver+ +strTalkInfo); Socket socketSend; PrintWriter outSend; / 得到当前时间 GregorianCalendar calendar = new GregorianCalendar(); String strTime = (+calendar.get(Cal
23、endar.HOUR)+:+calendar.get(Calendar.MINUTE)+:+calendar.get(Calendar.SECOND)+); strTalkInfo +=strTime; if(strReceiver.equals(All) sendAll(talk|+strSender+ 对所有人说:+strTalkInfo); else if(strSender.equals(strReceiver) out.println(talk|不能自言自语哦!); else for(int i=0;ionlineUser.size();i+) if(strReceiver.equa
24、ls(onlineUser.elementAt(i) socketSend = (Socket)socketUser.elementAt(i); outSend = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketSend.getOutputStream(),true); outSend.println(talk|+strSender+ 对你说:+strTalkInfo); else if(strSender.equals(onlineUser.elementAt(i) socketSend = (Socket)s
25、ocketUser.elementAt(i); outSend = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketSend.getOutputStream(),true); outSend.println(talk|你对 +strReceiver+说:+strTalkInfo); / 初始化在线用户列表 private void initClientOnline() throws IOException String strOnline = online; for(int i=0;ionlineUser.size();i+) strOnline += |+onlineUser.elementAt(i); out.println(strOnline); / 信息群发 private void sendAll(String strSend) Socket socketSend; PrintWriter outSend; try for(int i=0;isocketUser.size();i+) socketSend = (Socket)socketUser.elementAt(i); outSend = new PrintWriter(new BufferedWriter(new Outp
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1