Java聊天室系统程序设计实验报告

合集下载

java聊天程序实验报告

java聊天程序实验报告

java聊天程序实验报告Java聊天程序实验报告一、引言随着互联网的快速发展,人们之间的交流方式也在不断改变。

聊天程序作为一种实时通信工具,已经成为人们日常生活中必不可少的一部分。

本实验旨在通过使用Java编程语言,设计并实现一个简单的聊天程序,以探索实时通信的原理和机制。

二、实验目的1. 学习和掌握Java编程语言的基本语法和面向对象的编程思想;2. 了解Socket编程的基本原理和实现方式;3. 设计并实现一个简单的聊天程序,实现用户之间的实时通信。

三、实验过程1. 确定程序的基本功能和界面设计。

聊天程序需要实现用户之间的即时通信,并提供简单的用户界面用于输入和显示聊天内容。

2. 使用Java编程语言,创建一个服务器端程序和多个客户端程序。

服务器端程序负责接收和转发客户端的消息,客户端程序负责发送和接收消息。

3. 使用Socket编程,建立服务器和客户端之间的连接。

服务器端程序监听指定的端口,等待客户端的连接请求;客户端程序通过指定服务器的IP地址和端口号,连接到服务器。

4. 实现消息的发送和接收功能。

客户端程序可以通过输入框输入消息,并通过Socket将消息发送到服务器;服务器端程序接收到消息后,将消息转发给其他客户端。

5. 实现消息的显示功能。

客户端程序通过界面显示接收到的消息,并可以将消息保存到本地。

四、实验结果经过实验,我们成功地实现了一个简单的Java聊天程序。

用户可以通过输入框输入消息,并通过服务器端进行消息的转发。

其他客户端可以接收到转发的消息,并在界面上进行显示。

同时,我们还实现了消息的保存功能,用户可以将接收到的消息保存到本地文件中。

五、实验总结通过本次实验,我们深入了解了Java编程语言的基本语法和面向对象的编程思想。

同时,我们也学习了Socket编程的原理和实现方式。

通过实践,我们掌握了如何使用Java编写一个简单的聊天程序,实现用户之间的实时通信。

然而,本实验只是一个简单的聊天程序,还有很多可以改进和扩展的地方。

java聊天程序实验报告

java聊天程序实验报告

java聊天程序实验报告《Java聊天程序实验报告》摘要:本实验报告旨在介绍和分析我们设计并实现的基于Java的聊天程序。

通过该程序,用户可以在网络上进行实时的文字交流,实现了简单的聊天功能。

我们将介绍程序的设计思路、实现过程、功能特点以及存在的问题和改进方向。

一、设计思路我们的聊天程序采用了客户端-服务器架构,通过Socket通信实现了用户之间的数据传输。

客户端和服务器端分别使用了Java的Socket和ServerSocket类来建立连接和进行通信。

客户端可以向服务器发送消息并接收其他用户的消息,服务器负责转发消息给其他在线用户。

二、实现过程在实现过程中,我们首先设计了程序的基本框架,包括客户端和服务器端的代码结构。

然后,我们使用Socket和ServerSocket类来建立连接和进行数据传输。

客户端和服务器端分别使用了多线程来处理连接请求和消息转发,以保证程序的稳定性和并发性。

三、功能特点我们的聊天程序具有以下功能特点:1. 用户注册和登录:用户可以注册新账号并登录到服务器,实现了用户身份的识别和管理。

2. 实时聊天:用户可以在聊天室中实时发送和接收消息,与其他在线用户进行文字交流。

3. 离线消息:服务器可以保存用户的离线消息,并在用户上线时进行推送,确保用户不会错过重要消息。

四、存在的问题和改进方向在实验过程中,我们发现了一些问题和改进方向:1. 安全性问题:目前我们的程序还没有实现用户身份验证和消息加密等安全机制,存在一定的安全风险。

2. 用户体验:目前用户界面较为简陋,可以进一步优化界面设计和交互体验。

3. 功能扩展:可以考虑增加文件传输、群聊等功能,丰富程序的功能特点。

结论:通过本次实验,我们成功设计并实现了基于Java的聊天程序,实现了简单的聊天功能。

在未来,我们将继续改进程序,提高安全性和用户体验,丰富功能特点,使程序更加完善和实用。

JAVA聊天室实验报告 网络编程技术实验报告

JAVA聊天室实验报告 网络编程技术实验报告

网络编程技术大作业
1.3 参考文档
版本:0.1.0 第 5页
序号 1 2 3
文档名 《Java 大学实用教程》 《TCP/IP 网络编程技术基础》 《Java 一对一网络编程》
012.6.14 2012.6.14
版本 第二版 第一版
4 系统设计说明...................................................................................................................................................... 8 4.1 模块整体结构图...................................................................................................................................... 8 4.2 使用说明书.............................................................................................................................................. 8
适用范围:聊天程序使用者,功能相似的程序开发人员,以及其他需要了解本系统工作 原理的人员。
1.2 术语/缩略语
序号 1 2 3
4
5 6 7 8 9 10 11 12 13
术语/缩略语 API Socket Frame Java Application 目标 IP 端口
Listener Client Sever Flag InputStream OutputStream Awt.event

JAVA课程设计报告聊天室

JAVA课程设计报告聊天室

JAVA课程设计报告聊天室一、课程目标知识目标:1. 学生能理解网络编程的基本概念,掌握JAVA Socket编程的基础知识。

2. 学生能运用面向对象编程思想,设计并实现聊天室客户端与服务器的数据传输功能。

3. 学生了解并掌握多线程技术在网络编程中的应用。

技能目标:1. 学生能运用所学知识,独立编写并调试简单的聊天室程序。

2. 学生具备分析问题、解决问题的能力,能针对聊天室程序进行优化和改进。

3. 学生能在团队协作中发挥自己的作用,与他人共同完成一个完整的网络编程项目。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习JAVA的自信心。

2. 学生认识到团队合作的重要性,培养良好的团队协作精神。

3. 学生通过编程实践,体验创新与创造的乐趣,培养积极向上的学习态度。

本课程针对高年级学生,结合课本内容,注重理论与实践相结合,以提高学生的实际编程能力为主要目标。

课程要求学生在掌握基本知识的基础上,能够独立完成实际项目,培养其分析问题、解决问题的能力。

同时,课程强调团队协作,使学生学会与他人共同进步,共同成长。

通过本课程的学习,使学生达到知识、技能和情感态度价值观的全面提升。

二、教学内容1. 网络编程基础理论:介绍网络编程的基本概念,包括IP地址、端口号、协议等,使学生理解网络通信的基本原理。

- 教材章节:第三章 网络编程基础2. JAVA Socket编程:讲解Socket编程的原理,指导学生掌握客户端与服务器之间的数据传输方法。

- 教材章节:第四章 Socket编程3. 面向对象编程:运用面向对象编程思想,设计聊天室程序,包括类的定义、封装、继承与多态。

- 教材章节:第二章 面向对象编程基础4. 多线程技术:介绍多线程编程的概念,分析在聊天室程序中如何实现多用户并发通信。

- 教材章节:第五章 多线程编程5. 聊天室程序设计与实现:指导学生完成聊天室客户端与服务器的编写,实现基本的功能需求。

Java聊天室系统程序设计实验报告

Java聊天室系统程序设计实验报告

Java聊天室系统程序设计实验报告院(系):信息与通信工程系专业:计算机应用技术班级:学号:姓名:指导老师:2013/6/8目录第一部分:系统设计总述............................................................................1.设计目的:......................................................................................2.设计总体要求:..................................................................................3.实现目的:...................................................................................... 第二部分:系统需求分析............................................................................1.系统任务描述....................................................................................2.系统功能分析....................................................................................3.系统可行性分析.................................................................................. 第三部分:系统设计................................................................................1.系统总体结构设计................................................................................2.系统主体的处理流程..............................................................................3.系统流程逻辑.................................................................................... 第四部分:代码分析................................................................................1.服务器端部分代码................................................................................2.客户端部分代码.................................................................................. 第五部分:系统的具体实现..........................................................................界面设计.......................................................................................... 第六部分:小结.................................................................................... 第七部分:参考文献................................................................................ 第一部分:系统设计总述1.设计目的:1.在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计特性的理解。

实验报告java聊天程序

实验报告java聊天程序

实验报告java聊天程序实验报告:Java聊天程序引言:随着互联网的高速发展,聊天已经成为人们生活中不可或缺的一部分。

为了更好地理解和应用Java语言,我们进行了一项关于Java聊天程序的实验。

本实验报告将介绍实验目的、实验环境、实验内容、实验结果以及实验总结等相关内容。

一、实验目的:本实验的主要目的是通过编写Java程序实现一个简单的聊天程序,通过网络连接两个客户端,使客户端之间可以实现文字的交互。

通过实验,我们可以更好地理解网络通信的基本概念和Java语言的网络编程。

二、实验环境:1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. Java版本:Java 84. 网络环境:局域网环境三、实验内容:本实验主要包括三个部分:客户端程序、服务器程序和网络通信。

1. 客户端程序:客户端程序主要负责向服务器发送消息并接收服务器发送的消息。

在客户端程序中,我们使用Java的Socket类进行网络通信,并使用多线程实现客户端的并发访问。

2. 服务器程序:服务器程序主要负责接收客户端发送的消息,并将消息广播给其他连接的客户端。

在服务器程序中,我们使用Java的ServerSocket类进行网络通信,并使用多线程实现服务器的并发处理。

3. 网络通信:通过网络通信,实现客户端和服务器之间的消息传输。

在本实验中,我们使用Java的Socket类和ServerSocket类进行网络通信,并使用TCP/IP协议建立可靠连接。

四、实验步骤:1. 客户端程序编写:首先,我们编写客户端程序。

在客户端程序中,我们创建一个Socket对象,通过该对象与服务器建立连接。

然后,我们使用输入输出流读写数据,并使用多线程实现客户端的并发处理。

2. 服务器程序编写:其次,我们编写服务器程序。

在服务器程序中,我们创建一个ServerSocket对象,通过该对象监听指定端口的连接请求。

当有客户端连接到服务器时,我们创建一个新的线程处理该连接,接收客户端发送的消息并转发给其他连接的客户端。

聊天程序设计实验报告范文

聊天程序设计实验报告范文

聊天程序设计实验报告范文JAVA语言,聊天室实验报告某某专业名称实验室实验课程实验名称姓名学号同组人员实验日期某某某某大学软件工程2号实验楼201室JAVA高级程序设计聊天程序设计(客户端、服务端)无2022年12月12日JAVA语言,聊天室实验报告一、实验目的掌握基于TCP、UDP协议的聊天服务器端与客户端程序设计,掌握Socket,ServerSocket,DatagramSocket,DatagramPacket类的使用。

二、实验原理TCP和UDP协议的支持。

ServerSocket和Socket的使用。

三、实验内容实验截图JAVA语言,聊天室实验报告代码importjava.awt.Point;importjava.io.BufferedReader; importjava.io.IOE某ception; importjava.io.InputStreamReader; importjava.io.PrintWriter;import.ServerSocket;import.Socket;importjava.te某t.DateFormat; importjava.util.Date;importjava.util.HahMap;importjava.util.Vector;importjava.util.logging.Level; importjava.util.logging.Logger;/某某某某/publicclae某tendjava某.wing.JFrame{privateServerSocketerver;privateint=0;privatechar[]chatBuf=newchar[2048]; privateStringchatIpAddre="127.0.0.1"; privatefinalintchatPort=5200;privateHahMap<String,Vector<IMeage>>chatRecordMap;//privateHahMap<String,Integer>chatRecordHMap; publicTalkHome(){chatRecordMap=newHahMap<String,Vector<IMeage>>();//chatRecordHMap=newHahMap<String,Integer>();try{erver=newServerSocket(Integer.valueOf(chatPort));}catch(IOE某ceptione某){Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE, null,e某);}newThread(newRunnable(){publicvoidrun(){while(true){try{Socketocket=erver.accept();JAVA语言,聊天室实验报告BufferedReaderin=newBufferedReader(newInputStreamReader(ocket.getInputStream()));inttmp_len=-1;StringBuilderchatStrBuilder=newStringBuilder();while((tmp_len=in.read(chatBuf))!=-1){chatStrBuilder.append(chatBuf,0,tmp_len);}addMeage(ocket.getInetAddre().getHotAddre(),chatStrBuilder.toString(),fale);in.cloe();ocket.cloe();}catch(IOE某ceptione某){Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,nu ll,e某);}}}).tart();}privatevoidreChatWindow(StringipAddre){Sytem.out.println(ipAddre);Vector<IMeage>chatRecord=chatRecordMap.get(ipAddre); jTe某tArea1.etTe某t("");if(chatRecord==null){chatRecord=newVector<IMeage>();chatRecordMap.put(ipAddre,chatRecord);}ele{for(IMeageiMe:chatRecord){if(iMe.imyelf){jTe某tArea1.append("我"+iMe.dateString+"}ele{jTe某tArea1.append("TA"+iMe.dateString+"}}}privatevoidaddMeage(finalStringipAddre,StringmeString,boolea nimyelf){Vector<IMeage>chatRecord=chatRecordMap.get(ipAddre);if(chatRecord==null){JAVA语言,聊天室实验报告chatRecord=newVector<IMeage>();chatRecordMap.put(ipAddre,chatRecord);}finalIMeageiMeage=newIMeage(meString,imyelf);chatRecord.add(iMeage);if(imyelf){newThread(newRunnable(){publicvoidrun(){try{SocketendMeage=newSocket(ipAddre,chatPort);PrintWriterendWindow=newPrintWriter(endMeage.getOutputStream());endWindow.print(iMeage.meString);endWindow.fluh();endWindow.cloe();endMeage.cloe();jTe某tArea1.append("我"+iMeage.dateString+"}catch(IOE某ceptione某){Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,nu ll,e某);}}}).tart();}ele{jTe某tArea1.append("TA"+iMeage.dateString+"}}jCheckBo某1=newjava某.wing.JCheckBo某();jScrollPane2=newjava某.wing.JScrollPane();jTe某tArea2=newjava某.wing.JTe某tArea();jButton2=newjava某.wing.JButton();jFormattedTe某tField1=newjava某.wing.JFormattedTe某tField();jFormattedTe某tField2=newjava某.wing.JFormattedTe某tField();jLabel1=newjava某.wing.JLabel();jLabel2=newjava某.wing.JLabel();JAVA语言,聊天室实验报告jPanel3=newjava某.wing.JPanel();jLabel3=newjava某.wing.JLabel();jScrollPane3=newjava某.wing.JScrollPane();jTe某tArea1=newjava某.wing.JTe某tArea();jCheckBo某1.etTe某t("jCheckBo某1");etDefaultCloeOperation(java某.wing.WindowContant.E某IT_ON_CLOSE);etBackground(newjava.awt.Color(255,255,255));etBound(newjava.awt.Rectangle(0,0,520,520));etCuror(newjava.awt.Curor(java.awt.Curor.DEFAULT_CURSOR));etModalE某cluionType(java.awt.Dialog.ModalE某cluionType.APPLICATION_E某CLUDE);jTe某tArea2.etColumn(20);jTe某tArea2.etFont(newjava.awt.Font("微软雅黑",0,14));//NOI18NjTe某tArea2.etLineWrap(true);jTe某tArea2.etRow(5);jScrollPane2.etViewportView(jTe某tArea2);jButton2.etTe某t("发送");jButton2.addActionLitener(newjava.awt.event.ActionLitener(){ publicvoidactionPerformed(java.awt.event.ActionEventevt){jButton 2ActionPerformed(evt);}});jFormattedTe某tField1.etTe某t("127.0.0.1");jFormattedTe某tField1.etToolTipTe某t("");jFormattedTe某tField2.etTe某t("5200");jFormattedTe某tField2.etToolTipTe某t("");jLabel1.etTe某t("IP:");jLabel2.etTe某t(":");jPanel3.etBackground(newjava.awt.Color(255,255,255));JAVA语言,聊天室实验报告}});jLabel3.etTe某t("对方IP:");jLabel3.etToolTipTe某t("");java某.wing.GroupLayoutjPanel3Layout=newjava某.wing.GroupLayout(jPanel3);jPanel3.etLayout(jPanel3Layout);jPanel3Layout.etHorizontalGroup(jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap().addPreferredGap(ponentPlacement.UNRELATED)java某.wing.GroupLayout.PREFERRED_SIZE,131,java某.wing.GroupLayout.PREFERRED_SIZE).addContainerGap(java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)) );jPanel3Layout.etVerticalGroup(jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(jPanel3Layout.createSequentialGroup() .addGap(22,22,22).addGroup(jPanel3Layout.createParallelGroup(java 某.wing.GroupLayout.Alignment.BASELINE)java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE).addContainerGap(java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)) );jTe某tArea1.etEditable(fale);jTe某tArea1.etColumn(20);JAVA语言,聊天室实验报告jTe某tArea1.etFont(newjava.awt.Font("微软雅黑",0,14));//NOI18NjTe某tArea1.etLineWrap(true);jTe某tArea1.etRow(5);jScrollPane3.etViewportView(jTe某tArea1);java某.wing.GroupLayoutlayout=newjava某.wing.GroupLayout(getContentPane());getContentPane().etLayout(layout);layout.etHorizontalGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(java某.wing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup().addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(java某.wing.GroupLayout.Alignment.TRAILING,layout.createSequentialGr oup().addGap(2,2,2).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE,104,java某.wing.GroupLayout.PREFERRED_SIZE).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE,6,java某.wing.GroupLayout.PREFERRED_SIZE).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE,43,java某.wing.GroupLayout.PREFERRED_SIZE).addPreferredGap(ponentPlacement.RELATED,123,Short.MA某_VALUE).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE)JAVA语言,聊天室实验报告.addContainerGap()));layout.etVerticalGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(layout.createSeq uentialGroup().addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING,fale)java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)java某.wing.GroupLayout.DEFAULT_SIZE,358,Short.MA某_VALUE)) .addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.DEFAULT_SIZE,131,Short.MA某_VALUE) .addPreferredGap(ponentPlacement.RELATED).addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.BASELINE)java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE)java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE).addGap(2,2,2)));pack();}//</editor-fold>addMeage(chatIpAddre,jTe某tArea2.getTe某t(),true);jTe某tArea2.etTe某t("");}if(evt.getStateChange()==1){JAVA语言,聊天室实验报告chatIpAddre=evt.getItem().toString();reChatWindow(chatIpAddre);}}privatePoint;/某某某/publictaticvoidmain(Stringarg[]){try{for(java某.wing.UIManager.LookAndFeelInfoinfo:java某.wing.UIManager.getIntalledLookAndFeel()){if("Nimbu".equal(info.getName())){java某.wing.UIManager.etLookAndFeel(info.getClaName());break;}}}catch(ClaNotFoundE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}catch(IntantiationE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}catch(IllegalAcceE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}catch(java某.wing.UnupportedLookAndFeelE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}//</editor-fold>/某Createanddiplaytheform某/java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newTalkHome().etViible(true);}});JAVA语言,聊天室实验报告}//Variabledeclaration-donotmodifyprivatejava某.wing.JButtonjButton2;privatejava某.wing.JCheckBo某jCheckBo某1;privatejava某.wing.JFormattedTe某tFieldjFormattedTe某tField1;privatejava某.wing.JFormattedTe某tFieldjFormattedTe某tField2;privatejava某.wing.JLabeljLabel1;privatejava某.wing.JLabeljLabel2;privatejava某.wing.JLabeljLabel3;privatejava某.wing.JPaneljPanel3;privatejava某.wing.JScrollPanejScrollPane2;privatejava某.wing.JScrollPanejScrollPane3;privatejava某.wing.JTe某tAreajTe某tArea1;privatejava某.wing.JTe某tAreajTe某tArea2;}claIMeage{publicbooleanimyelf;publicStringmeString;publicIMeage(Stringme,booleanimyelf){thi.imyelf=imyelf;thi.meString=me;}四、实验心得其实java已经将TCP和UDP协议高度封装了,熟练使用ServerSocket和Socket,DataGram会写出想要的网络程序,并不是很难。

JAVA实训报告--聊天室

JAVA实训报告--聊天室

《Java实训》设计报告电子信息工程学院专业:软件技术班级:1班实训:聊天室系统总体设计1、设计思路聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。

因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。

因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。

1.首先通过继承JFrame类构造服务器界面。

2.设计客户端程序使其能够完成正常的通信功能。

3.设计监听程序,使其显示登录的ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。

2、各个模块详细的功能描述。

1、服务器端功能描述:启动服务器端。

2、客户端功能描述:启动客户端;显示登录昵称:显示聊天记录:发送信息;退出聊天室。

系统详细设计1、界面设计主要由类ChatRoom来实现,界面实际总体如下:输入昵称的文本框,输入IP地址的文本框以及输入端口的文本框;连接的按钮;退出按钮;接受消息的文本域;发送消息文本框;发送按钮。

项目设计在设计聊天室时,编写3个Java源文件:Client.java、Frame1.java、ServerThread.java;分别放在两个包中,一个是client,放Client.java、Frame1.java;一个是server,放ServerThread.java;聊天室除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。

下面是Java源文件的总体设计。

Client(主类)客户端Client类负责创建聊天室客户端的主窗口,该类含有main方法,计算器从该类开始执行。

JAVA课程设计实验报告-“聊天室”报告

JAVA课程设计实验报告-“聊天室”报告
网上查阅资料
第二章 聊天室的设计
2.1聊天室的粗略设计分析
聊天系统平台应有两个部分组成:服务端和客户端。服务端主要完成用户信息的存储、客户端命令的接受与响应以及发送系统消息、信息转发、踢人等服务端应有的功能。客户端主要完成聊天信息的发送与接受、登录、注销等功能。
此c/s系统使用的是TCP/IP协议,应用了如下通讯模式:
如果用户名和密码正确的话,则登录聊天室主界面;如果已经在线,则输出已经在线;否则输出用户名和密码错误,需要重新登录或者注册。
在线用户列表
用户登录之后,需要知道系统中,有哪些用户在线,这样可以方便用户选择与个别用户私聊和传送文件,也可以进行公聊。
用户公聊
用户输入的用户名和密码都正确后,则进入聊天室。聊天主界面主要由四大版块组成:公聊的聊天信息、在线用户列表、好友列表,系统消息和聊天的一些操作。
1.2聊天室的基本功能-------------------------------------------------------------3
1.3设计所用参考资料-------------------------------------------------------------6
第二章 聊天室的设计-------------------------------------------6
由于Client使用了流套接字,所以服务程序也要使用流套接字。这就要创建一个ServerSocket对象,接下来服务程序进入无限循环之中,无限循环从调用ServerSocket的accept()方法开始,在调用开始后accept()方法将导致调用线程阻塞直到连接建立。在建立连接后accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。由于存在单个服务程序与多个客户程序通讯的可能,服务程序循环检测是否有客户连接到服务器上,如果有,则创建一个线程来服务这个客户,以此完成对客户端的监听。

java聊天室实验报告

java聊天室实验报告

java聊天室实验报告Java聊天室实验报告一、引言近年来,随着互联网的快速发展,聊天室作为一种实时交流工具,受到越来越多人的关注和使用。

为了深入了解聊天室的原理和实现方式,本次实验选择了Java作为开发语言,设计了一个基于Java的聊天室应用程序。

二、实验目的1. 学习Java Socket编程的基本原理和技术;2. 理解聊天室的基本功能和实现方式;3. 掌握多线程编程的相关知识;4. 实践团队协作和项目管理的能力。

三、实验环境1. 操作系统:Windows 10;2. 开发工具:Eclipse IDE;3. 编程语言:Java;4. 版本控制工具:Git。

四、实验过程1. 项目规划与设计在开始编写代码之前,我们首先进行了项目规划和设计。

根据聊天室的功能需求,我们确定了客户端和服务器端的基本架构,并绘制了类图和时序图,明确了各个类之间的关系和通信方式。

2. 客户端实现客户端是用户与聊天室进行交互的界面,我们使用Java Swing库进行界面设计。

通过Socket连接服务器,客户端可以发送消息给服务器,并接收服务器转发的其他客户端的消息。

为了实现实时聊天,我们使用了多线程技术,一个线程负责接收消息,另一个线程负责发送消息。

3. 服务器端实现服务器端是聊天室的核心,负责接收客户端的连接请求,并转发消息给其他客户端。

我们使用Java Socket编程实现了服务器端的逻辑。

服务器端通过监听特定的端口,接收客户端的连接请求,并为每个客户端创建一个独立的线程处理其消息。

同时,服务器端维护了一个客户端列表,用于管理和转发消息。

4. 功能完善与测试在完成客户端和服务器端的基本功能后,我们进行了功能完善和测试。

我们增加了一些附加功能,如用户登录、用户列表显示等。

同时,我们进行了多线程并发测试、异常处理测试和界面兼容性测试,保证了程序的稳定性和可靠性。

五、实验结果与分析经过一段时间的努力,我们成功地实现了一个基于Java的聊天室应用程序。

JAVA课程设计实验报告-“聊天室”报告

JAVA课程设计实验报告-“聊天室”报告
聊天信息版块设计思想:一种就是将客户的聊天信息写入数据库,一种是将其写入向量中。在本次项目中,要求学员把客户的聊天信息写入数据库中。
用户私聊
如果两个人聊的话题比较隐秘,不想被其他人看到,就要使用私聊。在这里,如果说话对象是所有人的话,不能选择私聊;从当前好友列表中选择了一个用户之后,则私聊对话框应该弹出来。
第一章聊天室的描述
1 .1聊天室的设要求
当今社会,网络技术越来越发展,可以说,二十一世纪就是网络的世纪。网络迅猛发展,势不可挡。为了实现资源共享,各式各样的网站发展迅速,各种各样的聊天工具不断更新。某公司希望通过一个聊天工具加强员工和客户之间的沟通和交流。所以制作一个聊天室势在必行。
为了实现一个更好的网络交互平台,各用户之间能够实时方便的传递信息,按照用户对系统的要求不同,可以在聊天室里实现公共聊天,也可以邀几个私交好友私聊,同时提供了两个用户之间能够传送文件。本系统是基于方便用户聊天,传递信息,共享资源,所以系统的功能主要是从以上几个模块着手。
1、服务器负责数据管理及程序处理。
2、客户机负责界面描述和界面显示。
3、客户机向服务器提出处理要求。
4、服务器响应将处理结果返回客户机。
5、使网络数据流量最少。
1.2聊天室的基本功能
1.用户注册
2.用户登录
3.在线用户列表
4.用户公聊
5.用户私聊
6.好友信息维护
7.私聊信息的维护
8.登录日志的维护
9.用户注销
添加好友
删除好友
私聊信息的维护
如果两个人聊的话题比较隐秘,不想被其他人看到,就要使用私聊。而且只有好友之间才能进行私聊。要与某用户进行私聊,必须把对方加为好友。与好友之间的聊天信息,应该以文件的方式存储在客户端,不显示在公聊的版面上。

java实训聊天系统报告总结3篇

java实训聊天系统报告总结3篇

java实训聊天系统报告总结3篇Report summary of java training chat system汇报人:JinTai Collegejava实训聊天系统报告总结3篇前言:报告是按照上级部署或工作计划,每完成一项任务,一般都要向上级写报告,反映工作中的基本情况、工作中取得的经验教训、存在的问题以及今后工作设想等,以取得上级领导部门的指导。

本文档根据申请报告内容要求展开说明,具有实践指导意义,便于学习和使用,本文档下载后内容可按需编辑修改及打印。

本文简要目录如下:【下载该文档后使用Word打开,按住键盘Ctrl键且鼠标单击目录内容即可跳转到对应篇章】1、篇章1:java实训聊天系统报告总结2、篇章2:java实训聊天系统报告总结3、篇章3:java实训聊天系统报告总结篇章1:java实训聊天系统报告总结经过三个星期的学习,我们终于把这个图书馆管理系统做出来了,虽然做得不是很完美,但是却是我们这个小组的每一个成员辛苦了三个星期的成果,我们为此感到开心。

说实话,我们这一组的JAVA都学得不是很好,上课也听得不是很明白,所以在刚开始做的时候,我们每一个人都认为这是一个不可能完成的任务,刚开始我们也想过要放弃,想想这么难怎么可能完成呢!可是后来看到其他组都在认真的做任务,我们想想也不能这样放弃,至少也得试试,如果不会的话,再去请教会的人,学习不就是从不会到会的!于是第一个星期我们把任务分配好了,但是这一周我们把大部分的时间浪费了,也没有做出来什么,只是把一个简单的界面做好了。

不过我们也很开心了,因为至少是我们自己做出来的,虽然没有太完善。

第二个星期我们开始做每一个版块的功能模块,一共要完成三个版块,我们六个人分成两组我们这组要完成最近一个系统维护版块,这个版块包括两大模块,更改密码和用户管理,而我个人主要负责的是用户管理这个版块。

在实训的过程中我们还学到了JAVA的图形化界面。

这让我们很轻松的就能把一个界面弄出来,而不需要让我们打很我繁琐的程序代码,当然我的这个模块的界面我花了半天就做出来了,做出来之后,接下来就是接监听,这对我来说是一个难点,起初我是一点也不会的,自己看书也只是看得懂,但也编不出来,当时我很着急,看到人家都做出来了。

JAVAWEB设计一个简易聊天室实验报告

JAVAWEB设计一个简易聊天室实验报告
{
var str1=.value;
var str2=login.pwd.value;
var str3=login.sex.value;
var str4=login.pwd.value;
var str5=login.pwd2.value;
if(str1=="")
{
alert("请输入用户名!");
out.println(juzhu[i] + "&nbsp;&nbsp;<br> ");
}
//接收checkbox类信息
out.print("爱好:");
String job[] = request.getParameterValues("JOB");
if(job != null) {
for(int i=0; i<job.length; i++)
<frameset rows="*,150">
<frame src ="message.jsp">
<frame src ="talk.jsp">
</frameset>
</HTML>
(2)显示聊天内容及刷新
<%@ page language="java" contentType="text/html;charset=gb2312"%>
application.setAttribute("msg",name);
application.setAttribute("msg1",pwd);

java聊天室 实验报告

java聊天室 实验报告

java聊天室实验报告Java聊天室实验报告引言:聊天室是一种通过网络连接,允许用户在同一平台上进行实时交流的应用程序。

随着互联网的普及,聊天室成为人们日常生活中不可或缺的一部分。

本实验旨在通过使用Java编程语言,设计和实现一个简单的聊天室应用程序,并探讨其实现过程中所涉及的关键技术和挑战。

一、项目背景随着网络技术的飞速发展,人们对于实时交流的需求不断增加。

聊天室作为一种方便快捷的交流工具,受到了广大用户的欢迎。

本项目旨在利用Java编程语言,实现一个基于网络的聊天室应用程序,以满足用户的实时交流需求。

二、项目目标1. 设计和实现一个基于Java的聊天室应用程序。

2. 实现用户之间的实时消息传递功能。

3. 提供可靠的用户身份验证机制,确保聊天室的安全性。

4. 实现聊天记录的存储和查看功能,方便用户回顾历史消息。

三、技术实现1. 服务器端在服务器端,我们使用Java的Socket编程实现了与客户端的连接和通信。

通过建立一个服务器Socket,监听指定端口,可以接受来自客户端的连接请求。

一旦连接建立,服务器端就会创建一个新的线程来处理该客户端的请求,并实现实时消息的传递和处理。

2. 客户端在客户端,我们同样使用Java的Socket编程实现了与服务器端的连接和通信。

客户端通过建立一个Socket,指定服务器的IP地址和端口号,即可与服务器建立连接。

客户端通过输入消息并发送给服务器,同时接收来自服务器的消息并显示在界面上。

3. 用户身份验证为了确保聊天室的安全性,我们使用了用户身份验证机制。

在用户登录时,客户端将用户名和密码发送给服务器端。

服务器端通过验证用户信息的正确性,返回登录结果给客户端。

只有通过身份验证的用户才能进入聊天室并参与实时交流。

4. 聊天记录存储为了方便用户回顾历史消息,我们实现了聊天记录的存储和查看功能。

服务器端将接收到的消息保存在数据库中,并提供查看聊天记录的接口。

用户可以通过指定时间范围或关键词来查询历史消息,以便回顾和查找需要的信息。

《Java程序设计》课程设计报告-简易聊天室系统

《Java程序设计》课程设计报告-简易聊天室系统

华北科技学院课程设计说明书班级: 信息与计算科学B091学号:姓名:设计题目: 简易聊天室系统设计时间: 2011.12.26 至2011.12.30 指导教师:评语:________________________________ ________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____目录1 引言 (1)1.1课程设计选题 (1)1.2课程设计的目的 (1)1.3本选题的设计背景 (1)2.1 功能需求 (1)2.2 系统的开发运行环境 (2)2 总体设计 (2)3.1 系统体系结构设计 (2)3 详细设计与实现 (3)4.1 登录模块 (3)4.2 客户端注册界面模块 (5)4.3 客户端聊天模块 (8)4.4 服务器端模块 (10)4 小结和展望 (13)参考文献 (14)附录 (15)使用说明书 (15)源程序清单 (18)1引言1.1课程设计选题《简易聊天室系统》1.2课程设计的目的使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。

1.3本选题的设计背景聊天是是网络中广泛应用的服务之一,特别是现在信息社会对聊天的依赖也越累越大,我们品是在生活中很多人都在用的QQ就是一种很好的聊天工具,它不仅只是聊天那么简单,其它的功能也非常强大。

基于Java语言在网络编程中的广泛应用与我们基本每时每刻都在接触的聊天系统。

我选择尝试对一简单的聊天系统进行开发。

(完整word版)JAVA聊天室实验报告

(完整word版)JAVA聊天室实验报告

Java聊天室实验报告班级: ******学号: ********姓名:***目录:一、实验目的.。

.。

...。

.。

..。

..。

....。

..。

...。

...。

...。

..。

.。

.。

3二、所需技术 .。

.。

..。

.。

..。

..。

..。

.。

.。

.。

....。

.....。

.。

.。

.。

...。

3三、需求分析。

..。

.。

.。

..。

...。

.。

..。

.。

...。

..。

.。

.。

..。

3四、系统设计 .。

..。

.......。

...。

.。

....。

...。

.。

...。

....。

..。

.....。

.41、服务器结构 ..。

.。

..。

...。

.。

.。

.。

.。

...。

.....。

.。

.。

.。

42、客户端结构 ..。

.。

.....。

..。

...。

.。

..。

.。

.。

...。

.。

..。

.。

.。

4五、实现细节。

..。

...。

..。

...。

.....。

..。

..。

.。

....。

..。

..51、客户端细节。

.。

..。

.。

...。

..。

.。

..。

...。

..。

..。

.。

52、服务器细节 .。

.。

.。

....。

.。

.。

..。

.。

.。

..。

..。

..。

..。

.。

.。

..6六、系统展示。

...。

.。

.。

.。

.。

.。

.。

.。

.。

..。

..。

..。

..。

..。

.。

(7)七、实验小结。

.。

....。

..。

....。

.。

.。

...。

..。

...。

.。

.。

.。

..。

. (9)Rain153 WeChat 聊天室系统一、实验目的:1、使用Java技术完成聊天室系统,深入学习使用Java语言。

2、使用Java 的多线程机制,深入理解Java多线程技术的应用。

3、使用GUI,对JFrame的深入学习。

4、使用网络编程,掌握基于TCP协议的Socket编程,了解Socket编程的协议约定,掌握简单应用协议的开发.5、使用C/S架构,对网络编程有一定的了解。

二、所需技术本系统要求使用java技术开发。

所需知识包括java程序设计语言、swing基本GUI组件、多线程编程、socket编程、集成开发环境使用eclipse。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java聊天室系统程序设计实验报告题目:******院(系):******年级专业:******学生姓名:******指导老师:******开始时间:******完成时间:******第一部分:课程设计总述课程设计目的:1.学会Java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。

2.进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面设计、Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java数据库编程等。

3.通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。

课程设计总体要求:1.问题的描述与程序将要实现的具体功能。

2.程序功能实现的具体设计思路或框架,并检查流程设计。

3.代码实现。

4.程序测试(如程序代码、功能测试、可靠性测试和效率测试等)。

5.设计小结(包括)课程设计题目:目标本软件是一个实用聊天程序。

项目要实现以下目标:1)允许用户注册;2)允许注册用户登录聊天室;3)登录用户之间进行聊天文件传输;4)用户可以更改背景音乐;用户信息的保存本软件只是一个聊天室程序,所以用户只要打开程序就可以登录。

本软件使用文本文件或者数据库来保存用户数据。

需求分析对功能的规定1.系统的用例图(对注册用户)2.用户注册过程3.用户登录过程对性能的规定由于本软件只是一个聊天室程序,程序只是提供用户之间的聊天和文件传输,故对网络传输数据要求不是很高,只要正常的传输速度就可以了。

需要管理的数据用户的信息如下:用户名,密码,头像,电子邮件,地址。

4 开发环境本软件采用Java语言编写,Java语言是一种跨平台的编程语言,所以本软件对操作系统没有特别的要求。

而网络传输方面采用TCP/IP网络传输协议或者是RMI。

总体设计思路系统主要包含两个java文件,Server.java和UserLogin.java图形界面主要通过\\org\netbeans\lib\awtextra目录下的两个类:AbsoluteConstraints.class和AbsoluteLayout.class来控制。

启动系统通过依次点击批处理文件:1.bat,2.batServer.java中包含:其中Server类又包括如下类和方法:UserLogin.java包括:其中UserLogin类又包括如下类和方法:而UserLoginWindow类又包含如下事件和方法:系统为C/S模式。

首先根据功能模块将系统分为两部分:服务端(Server)和客户端(UserLogin)。

然后构造可以序列化的User类,这是本系统的对象。

根据需求功能细分类和方法。

建立文件和网络的传输通信。

实现聊天室的基本功能具体设计代码://server.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;import java.util.*;//用户信息class User implements Serializable{String UserName;String UserPassword;String UserHeadPhoto;String UserEmail;String UserAge;String SinkName;String FileName;byte FileData[];String Message;String Command;Vector vectorUserList;}public class Server extends JFrame{static Vector vectorStreamToUser=new Vector(1,1);static Vector vectorUserList=new Vector(1,1);private ServerSocket serverSocket;private JMenuItem aboutMenuItem;private JMenu commandMenu;private JMenu fileMenu;private JMenu helpMenu;private JMenuItem helpMenuItem;private JLabel jLabel1;private JLabel jLabel2;private JLabel jLabel3;private JLabel jLabel4;private JLabel jLabel5;private JList jList1;private JPanel jPanel1;private JScrollPane jScrollPane1;private JMenuItem warnMenuItem;private JMenuItem kickMenuItem;private JMenuBar menuBar;private JMenuItem msgMenuItem;private JMenuItem startMenuItem;private JMenuItem stopMenuItem;//右键事件菜单private static JPopupMenu menu;private String BlackList;//建立server框架public Server(){initComponents();}private void initComponents(){jPanel1 = new JPanel();jLabel2 = new JLabel();jLabel3 = new JLabel();jLabel4 = new JLabel();jLabel5 = new JLabel();jScrollPane1 = new JScrollPane();jList1 = new JList();jLabel1 = new JLabel();menuBar = new JMenuBar();fileMenu = new JMenu();startMenuItem = new JMenuItem();stopMenuItem = new JMenuItem();commandMenu = new JMenu();warnMenuItem = new JMenuItem();kickMenuItem = new JMenuItem();msgMenuItem = new JMenuItem();helpMenu = new JMenu();helpMenuItem = new JMenuItem();aboutMenuItem = new JMenuItem();getContentPane().setLayout(newbeans.lib.awtextra.AbsoluteLayout());setTitle("DaoDao2009服务器端");setResizable(false);//用户不能手动调整列宽度。

addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent evt) {exitForm(evt);}});jPanel1.setLayout(new beans.lib.awtextra.AbsoluteLayout()); try{//建立InetAddress对象InetAddress intel=InetAddress.getLocalHost();String SerName=intel.getHostName();String SerIp=intel.getHostAddress();jLabel2.setText(" 服务器名:"+SerName); //显示服务器端主机名jLabel3.setText("服务器IP:"+SerIp); //显示服务器端IP}catch(UnknownHostException e2){System.out.println("发生错误!");}jLabel2.setForeground(new Color(255,0,0));jLabel2.setFont(new Font("宋体", 0, 14));jPanel1.add(jLabel2, new beans.lib.awtextra.AbsoluteConstraints(20, 10, -1, -1));jLabel3.setForeground(new Color(255, 0, 0));jLabel3.setFont(new Font("宋体", 0, 14));jPanel1.add(jLabel3, new beans.lib.awtextra.AbsoluteConstraints(20, 30, -1, -1));jLabel4.setText("服务器状态:未启动");jLabel4.setForeground(new Color(255, 255, 0));jLabel4.setFont(new Font("宋体", 0, 14));jPanel1.add(jLabel4, new beans.lib.awtextra.AbsoluteConstraints(20, 240, -1, -1));jLabel5.setText("共有:0个客户在线");jLabel5.setForeground(new Color(255, 255, 51));jLabel5.setFont(new Font("宋体", 0, 14));jPanel1.add(jLabel5, new beans.lib.awtextra.AbsoluteConstraints(250, 240, -1, -1));menu = new JPopupMenu(); //右键事件菜单JMenuItem Admonition= new JMenuItem("警告");Admonition.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int state=JOptionPane.showOptionDialog(null,"确实要警告用户"+BlackList+"吗?","确认",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,null,null);if(state==JOptionPane.OK_OPTION){warnMenuItemActionPerformed(e);}}});JMenuItem Delete = new JMenuItem("删除");Delete.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int state=JOptionPane.showOptionDialog(null,"确实要删除用户"+BlackList+"吗?","确认",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,null,null);if(state==JOptionPane.OK_OPTION){kickMenuItemActionPerformed(e);}}});menu.add(Admonition);menu.add(Delete);jList1.setModel(new AbstractListModel() {String[] strings = {};public int getSize() { return strings.length; }public Object getElementAt(int i) { return strings[i]; }});jList1.setFont(new Font("Dialog",Font.BOLD | Font.ITALIC, 16));jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);jList1.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent evt){if (evt.getClickCount()==1){BlackList=(String)jList1.getSelectedValue();}}public void mouseReleased(MouseEvent evt){if (evt.isPopupTrigger()){menu.show(evt.getComponent(), evt.getX(), evt.getY());}}});jScrollPane1.setViewportView(jList1);jPanel1.add(jScrollPane1, new beans.lib.awtextra.AbsoluteConstraints(20, 45, 362, 190));jLabel1.setIcon(new ImageIcon("img\\Server.jpg"));jPanel1.add(jLabel1, new beans.lib.awtextra.AbsoluteConstraints(0, -10, -1, -1));getContentPane().add(jPanel1, new beans.lib.awtextra.AbsoluteConstraints(0, 0, 400, 270));menuBar.setBorder(null);menuBar.setBackground(new Color(0, 0, 0));fileMenu.setForeground(new Color(255, 255, 255));fileMenu.setText("文件");fileMenu.setBackground(new Color(0, 0, 0));fileMenu.setFont(new Font("宋体", 0, 14));startMenuItem.setForeground(new Color(255, 255, 255));startMenuItem.setFont(new Font("宋体", 0, 14));startMenuItem.setText("启动");startMenuItem.setBackground(new Color(0, 0, 0));startMenuItem.setBorder(null);startMenuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {startMenuItemActionPerformed(evt);}});fileMenu.add(startMenuItem);stopMenuItem.setForeground(new Color(255, 255, 255));stopMenuItem.setFont(new Font("宋体", 0, 14));stopMenuItem.setText("结束");stopMenuItem.setBackground(new Color(0, 0, 0));stopMenuItem.setBorder(null);stopMenuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {stopMenuItemActionPerformed(evt);}});fileMenu.add(stopMenuItem);menuBar.add(fileMenu);commandMenu.setForeground(new Color(255, 255, 255));commandMenu.setText("命令");commandMenu.setBackground(new Color(0, 0, 0));commandMenu.setFont(new Font("宋体", 0, 14));msgMenuItem.setForeground(new Color(255, 255, 255));msgMenuItem.setFont(new Font("宋体", 0, 14));msgMenuItem.setText("公告");msgMenuItem.setBackground(new Color(0, 0, 0));msgMenuItem.setBorder(null);msgMenuItem.addActionListener(new ActionListener() {msgMenuItemActionPerformed(evt);}});commandMenu.add(msgMenuItem);warnMenuItem.setForeground(new Color(255, 255, 255)); warnMenuItem.setFont(new Font("宋体", 0, 14));warnMenuItem.setText("警告");warnMenuItem.setBackground(new Color(0, 0, 0));warnMenuItem.setBorder(null);warnMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) {warnMenuItemActionPerformed(evt);}});commandMenu.add(warnMenuItem);kickMenuItem.setForeground(new Color(255, 255, 255)); kickMenuItem.setFont(new Font("宋体", 0, 14));kickMenuItem.setText("踢人");kickMenuItem.setBackground(new Color(0, 0, 0));kickMenuItem.setBorder(null);kickMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) {kickMenuItemActionPerformed(evt);}});commandMenu.add(kickMenuItem);menuBar.add(commandMenu);helpMenu.setForeground(new Color(255, 255, 255));helpMenu.setText("帮助");helpMenu.setBackground(new Color(0, 0, 0));helpMenu.setFont(new Font("宋体", 0, 14));helpMenu.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {helpMenuActionPerformed(evt);}});helpMenuItem.setForeground(new Color(255, 255, 255)); helpMenuItem.setFont(new Font("宋体", 0, 14));helpMenuItem.setText("帮助主题");helpMenuItem.setBackground(new Color(0, 0, 0));helpMenuItem.setBorder(null);helpMenuItem.addActionListener(new ActionListener() {helpMenuItemActionPerformed(evt);}});helpMenu.add(helpMenuItem);aboutMenuItem.setForeground(new Color(255, 255, 255));aboutMenuItem.setFont(new Font("宋体", 0, 14));aboutMenuItem.setText("关于");aboutMenuItem.setBackground(new Color(0, 0, 0));aboutMenuItem.setBorder(null);aboutMenuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {aboutMenuItemActionPerformed(evt);}});helpMenu.add(aboutMenuItem);menuBar.add(helpMenu);setJMenuBar(menuBar);pack();}public static void main(String args[]) //主函数{new Server().show();}class connection extends Thread{private User fromUserMessage=new User();private User toUserMessage=new User();private Socket netUser;private ObjectInputStream streamFromUser;private ObjectOutputStream streamToUser;private boolean existName,existPassword;private String onlineNumber="Immovability";//判断在线人数的变化public connection(Socket UserSocket){netUser=UserSocket;try{streamFromUser = new ObjectInputStream(netUser.getInputStream());streamToUser = new ObjectOutputStream(netUser.getOutputStream());}catch(IOException e){try{netUser.close();}catch(IOException e1){System.out.print("Unable to set up stream"+e1);return;}}this.start();}public boolean validateName(String name){boolean validate;String recode,message;RandomAccessFile logfile;FileInputStream fsread;InputStreamReader inputread;BufferedReader bfread;validate=false;try{fsread=new FileInputStream("User.txt");inputread=new InputStreamReader(fsread);bfread=new BufferedReader(inputread);while((recode=bfread.readLine()) != null)//验证用户信息{StringTokenizer st = new StringTokenizer(recode,":"); while (st.hasMoreTokens()){message=st.nextToken();if(message.equals(name)){validate=true;break;}break;}}}catch(FileNotFoundException e){System.out.println("The specified file does not exist"); }catch(IOException e){System.out.println("Error performing IO Operation");}return validate;}public boolean validatePassword(String password){boolean validate;String recode,message;RandomAccessFile logfile;FileInputStream fsread;InputStreamReader inputread;BufferedReader bfread;validate=false;try{fsread=new FileInputStream("User.txt");inputread=new InputStreamReader(fsread);bfread=new BufferedReader(inputread);while((recode=bfread.readLine()) != null)//验证用户信息{StringTokenizer st = new StringTokenizer(recode,":"); while (st.hasMoreTokens()){message=st.nextToken();message=st.nextToken();if(message.equals(password)){validate=true;break;}break;}}}catch(FileNotFoundException e){System.out.println("The specified file does not exist"); }catch(IOException e){System.out.println("Error performing IO Operation");}return validate;}public void run(){try{for(;;){String ButtonMessage;fromUserMessage=(User)streamFromUser.readObject();//读用户信息ButtonMessage=mand; //读按钮信息existName=validateName(erName); //验证用户名existPassword=validatePassword(erPassword);//验证用户密码if(ButtonMessage.equals("Login")){Login();}if(ButtonMessage.equals("Enter")){Enter();}if(ButtonMessage.equals("Leave")){Leave();}if(!onlineNumber.equals("Immovability")){Updating(erName);}if(ButtonMessage.equals("PublicChat") || ButtonMessage.equals("PrivateChat")){Message();}if(ButtonMessage.equals("Request") || ButtonMessage.equals("FileCopy")){toSinkMessage();}if(ButtonMessage.equals("Agree") || ButtonMessage.equals("Refuse") || ButtonMessage.equals("Succeed")){toUserMessage();}}}catch(IOException e){}catch(ClassNotFoundException e){}try{streamFromUser.close();streamToUser.close();netUser.close();}catch(IOException e){}}public void Login()//注册请求处理{try{if(existName){mand="Repeat";streamToUser.writeObject((User)toUserMessage); //返回操作信息streamToUser.flush();}else{//加入新用户信息RandomAccessFile UserObj=new RandomAccessFile("User.txt","rw");UserObj.seek(UserObj.length());UserObj.writeBytes(erName+":"+erPassword+ ":"+erHeadPhoto+":"+erEmail+":"+fromUserMesserAge+"\n");onlineNumber="add";mand="Login";erName=erName;toUserMessage.Message="系统消息:大家欢迎"+erName+"加入我们的DaoDao聊天室!!!"+"\n";Server.vectorUserList.addElement(erName);//加入用户到用户在线列表toUserMessage.vectorUserList=Server.vectorUserList;streamToUser.writeObject((User)toUserMessage);//返回用户在线列表和操作信息streamToUser.flush();Server.vectorStreamToUser.addElement(streamToUser);//存储该对象的输出流jLabel5.setText("共有:"+Server.vectorUserList.size()+"个客户在线");//服务器刷新jList1.setListData(Server.vectorUserList);}}catch(IOException e){}}public void Enter()//登陆请求处理{try{if(existName && existPassword){onlineNumber="add";mand="Enter";erName=erName;toUserMessage.Message="系统消息:大家欢迎"+erName+"加入我们的欢乐聊天室!!!"+"\n";Server.vectorUserList.addElement(erName);//加入用户到用户在线列表toUserMessage.vectorUserList=Server.vectorUserList;streamToUser.writeObject((User)toUserMessage);//返回用户在线列表和操作信息streamToUser.flush();Server.vectorStreamToUser.addElement(streamToUser);//存储该对象的输出流jLabel5.setText("共有:"+Server.vectorUserList.size()+"个客户在线");//服务器刷新jList1.setListData(Server.vectorUserList);}else{mand="Error";streamToUser.writeObject((User)toUserMessage);//返回操作信息streamToUser.flush();}}catch(IOException e){}}public void Leave()//离开请求处理{String name=erName;Server.vectorStreamToUser.removeElementAt(Server.vectorUserList.indexOf(name));Server.vectorUserList.removeElement(name);onlineNumber="lessen";Updating(name);}public void Updating(String name)//群发新用户登陆通知,更新用户在线列表和对像框{try{if(onlineNumber.equals("add")){User toUserMessage=new User();mand="add";erName=name;toUserMessage.Message="系统消息:大家欢迎"+name+"加入我们的欢乐聊天室!!!"+"\n";for(int i=1;i<Server.vectorStreamToUser.size();i++){ObjectOutputStream newUserStream;newUserStream=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i-1);newUserStream.writeObject((User)toUserMessage);newUserStream.flush();}}if(onlineNumber.equalsIgnoreCase("lessen")){User toUserMessage=new User();mand="lessen";erName=name;toUserMessage.Message="系统消息:"+name+"悄悄的走了!!!"+"\n";for(int i=0;i<Server.vectorStreamToUser.size();i++){ObjectOutputStream newUserStream;newUserStream=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i);newUserStream.writeObject((User)toUserMessage);newUserStream.flush();}}jLabel5.setText("共有:"+Server.vectorUserList.size()+"个客户在线");//服务器刷新jList1.setListData(Server.vectorUserList);onlineNumber="Immovability";}catch(IOException e){}}public void Message()//聊天信息发送{User toUserMessage=new User();try{mand="Message";toUserMessage.Message=fromUserMessage.Message;if(mand.equals("PublicChat")){for(int i=0;i<Server.vectorUserList.size();i++){if(!(erName.equals(Server.vectorUserList.elementAt(i)))){streamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i);streamToUser.writeObject((User)toUserMessage);streamToUser.flush();}}}if(mand.equals("PrivateChat")){for(int i=0;i<Server.vectorUserList.size();i++){if(erName.equals(Server.vectorUserList.elementAt(i))){streamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i);streamToUser.writeObject((User)toUserMessage);streamToUser.flush();}}}}catch(IOException e){}}//文件传输信息----------------------------------public void toSinkMessage(){try{streamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(Server.v ectorUserList.indexOf(fromUserMessage.SinkName));streamToUser.writeObject(fromUserMessage);streamToUser.flush();}catch(IOException e){}}public void toUserMessage(){try{streamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(Server.v ectorUserList.indexOf(erName));streamToUser.writeObject(fromUserMessage);streamToUser.flush();}catch(IOException e){}}}private void startMenuItemActionPerformed(ActionEvent evt) //启动事件{new AppServer();jLabel4.setText("服务器状态:已启动");}class AppServer extends Thread{public AppServer(){try{serverSocket = new ServerSocket(1001);//建立InetAddress对象InetAddress intel=InetAddress.getLocalHost();String SerName=intel.getHostName();String SerIp=intel.getHostAddress();System.out.println("服务器名:"+SerName);System.out.println("服务器IP:"+SerIp);}catch(IOException e){System.out.println("Could not start server"+"."+e);}System.out.println("Server start......");this.start();}public void run(){try{while(true){Socket UserSocket = serverSocket.accept();connection con = new connection(UserSocket);}}catch(IOException e){System.out.println("Not listener"+"."+e);}}}private void stopMenuItemActionPerformed(ActionEvent evt) //停止事件{jLabel4.setText("服务器状态:即将关闭");String Message="各位用户请注意,服务器5秒钟后将关闭!敬请原谅!";try{User toUserMessage=new User();mand="SystemMessage";toUserMessage.Message=Message;for(int i=0;i<Server.vectorUserList.size();i++){ObjectOutputStreamstreamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i);streamToUser.writeObject((User)toUserMessage);streamToUser.flush();}}catch(IOException e){}try{Thread.sleep(5000);}catch(InterruptedException e){}System.exit(0);}private void msgMenuItemActionPerformed(ActionEvent evt) //公告事件{try{User toUserMessage=new User();String Mesage=JOptionPane.showInputDialog(null,"请输入公告内容:","系统消息",RMATION_MESSAGE);toUserMessage.Message="系统消息:"+Mesage+"\n";mand="SystemMessage";for(int i=0;i<Server.vectorUserList.size();i++){ObjectOutputStreamstreamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i);streamToUser.writeObject((User)toUserMessage);streamToUser.flush();}}catch(IOException e){}}private void warnMenuItemActionPerformed(ActionEvent evt) //警告事件{Object obj=evt.getSource();try{if(obj==warnMenuItem){BlackList=JOptionPane.showInputDialog(null,"请输入将警告的用户名:","系统消息",RMATION_MESSAGE);}User toUserMessage=new User();toUserMessage.Message="警告:请用文明用语!否则你将被强制退出!\n";mand="SystemMessage";ObjectOutputStreamstreamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(Server.vecto rUserList.indexOf(BlackList));streamToUser.writeObject((User)toUserMessage);streamToUser.flush();BlackList="";}catch(IOException e){}}private void kickMenuItemActionPerformed(ActionEvent evt) //踢人事件{Object obj=evt.getSource();try{if(obj==kickMenuItem){BlackList=JOptionPane.showInputDialog(null,"请输入将强制退出的用户名:","系统消息",RMATION_MESSAGE);}User toUserMessage=new User();for(int i=0;i<Server.vectorUserList.size();i++){if(BlackList.equals(Server.vectorUserList.elementAt(i))){mand="Kick";toUserMessage.Message="系统消息:对不起!你已被强制退出!\n";}else{erName=BlackList;mand="lessen";toUserMessage.Message="系统消息:"+BlackList+"已被强制退出!\n";}ObjectOutputStreamstreamToUser=(ObjectOutputStream)Server.vectorStreamToUser.elementAt(i);streamToUser.writeObject((User)toUserMessage);streamToUser.flush();}Server.vectorStreamToUser.removeElementAt(Server.vectorUserList.indexOf(Black List)); //服务器刷新Server.vectorUserList.removeElement(BlackList);jLabel5.setText("共有:"+Server.vectorUserList.size()+"个客户在线"); BlackList="";}catch(IOException e){}}private void aboutMenuItemActionPerformed(ActionEvent evt) //关于事件{}private void helpMenuItemActionPerformed(ActionEvent evt) //帮助事件{}private void helpMenuActionPerformed(ActionEvent evt){}private void exitForm(WindowEvent evt) //退出事件{System.exit(0);}}//UserLogin.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;import java.util.*;import javax.swing.border.*;import java.applet.*;import java.applet.AudioClip;import .URL;import .MalformedURLException;import java.awt.GridBagLayout;class User implements Serializable //用户信息类{String UserName;String UserPassword;String UserHeadPhoto;String UserEmail;String UserAge;String SinkName;String FileName;byte FileData[];String Message;String Command;Vector vectorUserList;}class IllegalLengthException extends Exception //自定义异常类{}public class UserLogin extends JFrame //联接服务器窗口类{// 登陆窗口变量声明private User fromServerMessage;private User toServerMessage;private static Vector vectorUserList;private UserLoginWindow frameEnter;private Frame frameLogin;private JPanel panelObject;private JLabel Label;private JComboBox ComboBoxUserName;private JPasswordField textUserPassword;private JButton buttonLogin,buttonEnter,buttonExit;private Socket toServer;private ObjectOutputStream streamToServer;private ObjectInputStream streamFromServer;private BufferedReader fromServer;//聊天室窗口变量声明private JLabel jLabelUserName;private JButton jButtonHelp;private JButton jButtonLoginout;private JButton jButtonMusic;private JButton jButtonOption;private JButton jButtonSend;private JButton jButtonTran;private JCheckBox jCheckBox1;private JComboBox jComboBoxFace;private JComboBox jComboBoxFontsize;private JComboBox jComboBoxFontstyle;private JComboBox jComboBoxUserlist;private JLabel jLabelBackground;private JLabel jLabelWelcome;private JList jList1;private JScrollPane jScrollPane1;private JScrollPane jScrollPane2;public JTextArea jTextArea1;private JPanel jPanel1;private JTextField jTextFieldMsg;private String Face[]={"说","大声的说","开心的说","大笑着说","惊讶的说","忧郁的说","伤心的说","犹豫着说","怯怯的说","皱着眉头说","做了个鬼脸说","吐了吐舌头说","愁眉苦脸的说"};//设置服务器IP地址窗口变量声明private static UserLogin frameServerIP;private JButton jButtonNext;private JLabel jLabel1;private JPanel jPanel2;private JTextField jTextFieldIpaddress;String ServerIPaddress;public UserLogin(){initComponents();//设置窗口位置居中intlocationX=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-getSize(). getWidth())/2;intlocationY=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-getSize() .getHeight())/2;setLocation(locationX,locationY);}public static void main(String args[]) //主函数{JWindow mainpage=new JWindow();mainpage.setSize(400,300);JPanel content = new JPanel();content.setOpaque(false);mainpage.getContentPane().add(content);content.setLayout(null);ImageIcon background = new ImageIcon("img\\page.jpg");JLabel backlabel = new JLabel(background);content.add(backlabel, new Integer(Integer.MIN_VALUE));backlabel.setBounds(0,0,background.getIconWidth(),background.getIconHeight()); mainpage.setLocation(200,150);mainpage.setVisible(true);try{content.setOpaque(false);Thread.sleep(2000);}catch(InterruptedException e){}mainpage.setVisible(false);frameServerIP=new UserLogin();frameServerIP.setVisible(true);}private void jButtonNextActionPerformed(ActionEvent evt) //下一步按钮事件{ServerIPaddress=jTextFieldIpaddress.getText().toString();StringTokenizer str=new StringTokenizer(ServerIPaddress,".");while (str.hasMoreTokens()){String IP1=str.nextToken();String IP2=str.nextToken();String IP3=str.nextToken();String IP4=str.nextToken();int ip1=Integer.parseInt(IP1);int ip2=Integer.parseInt(IP2);int ip3=Integer.parseInt(IP3);int ip4=Integer.parseInt(IP4);if((ip1>=1&&ip1<=223)&(ip2>=0&&ip2<=255)&(ip3>=0&&ip3<=255)&(ip4>=1&&ip4<=254)) {frameServerIP.setVisible(false);frameEnter=new UserLoginWindow();frameEnter.setSize(400,320);frameEnter.setVisible(true);}else{JOptionPane.showMessageDialog(this,"您输入了非法的IP地址,请再输入一次!");jTextFieldIpaddress.setText("");}break;}}private void exitForm(java.awt.event.WindowEvent evt) //退出按钮事件{System.exit(0);}class UserLoginWindow extends JFrame implements Runnable //登录窗口。

相关文档
最新文档