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方法,计算器从该类开始执行。

  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 //登录窗口。

相关文档
最新文档