Java聊天室课程设计报告

合集下载

Java聊天室程序设计报告

Java聊天室程序设计报告

《Java之聊天室制作》总结报告姓名 __赵其国___________________学号 __2_____________班级 __嵌入式一班__ _____________二〇一二年十二月二十日一,设计目的为了更好的巩固输入输出流,窗体设计,多线程运用,网络通信设计方面的知识。

把所学的课程及相关知识加以融会贯通。

二,设计内容设计的聊天室能实现用户登录,显示登录用户列表,以及发送聊天信息和显示聊天信息的功能。

并可以选择接收信息的用户进行单发或群发的功能,运行程序,登录服务器后,可以从列表中选择单个或多个用户进行聊天,它是图形界面,线程,流和文件系统等技术的综合使用。

三,概要设计实现的功能:1,启动服务器端,接收客户端发来的信息,并在服务器端窗体显示客户端聊天信息,再吧信息返给在线用户,窗体背景色为粉色2,启动客户端窗体,窗体背景色为粉色3,用户名编辑框输入用户名,设置字体显红色,单击登录按钮,在显示在线用户列表内显示用户名,同时用户名编辑框不能编辑4,发送编辑框输入发送内容,单击发送按钮,启动输出流,把信息发送出去,同时把发出的信息追加到聊天内容文本域内,显示用户名,时间和发送内容。

5,单击退出按钮,运用File类和JfileChooser类实现聊天信息的保存6,聊天信息文本域,在线用户显示域和发送信息的文本域加了滚动条,其中聊天信息文本域,发送信息的文本域的文字能自动换行。

7,别的客户端发来信息是通过输入流读取信息,并截取发来信息的用户名及信息,用户名加到在线用户列表上显示在线,信息追加到聊天内容文本域内,显示用户名,时间和发送内容。

功能不足之处:1,保存聊天信息保存为text格式的有黑块。

保存为Doc格式的要转码不能直接打开2,用户在线显示,只能在用户发送信息时别的用户才能得到在线的用户名,然后再加到在线用户列表中,显示用户在线。

3,聊天室只适合群聊,没有实现技能群聊又能和单个人聊天的功能4,用户输出“退出”后在线用户列表中就会把用户删除,不过没有实现没找到错误出在哪里。

Java实验报告:聊天室的设计

Java实验报告:聊天室的设计

综合实验聊天室的设计一、实验目的理解和掌握URL 通信的基本概念和组成,掌握URL 类的构造方法和成员方法,理解和掌握Socket 及UDP 编程。

二、实验原理利用网络通信的原理和Java中URL类进行编程。

三、主要仪器及耗材计算机与Windows 2000/XP系统;J2SDK、UltraEdit等软件。

四、实验内容与步骤内容:编写一个网上多用户聊天室程序。

要求:(1)服务器程序响应客户端程序不应该用很多时间。

(2)允许对与服务器连接的客户数有一定的限制。

(3)客户端程序提供客户聊天界面,用于输入信息和显示信息;接收通过服务器转发的其他客户聊天信息并显示。

步骤:1.在UltraEdit编辑环境下(推荐使用)或其它开发环境下开发Application和Applet程序;Applet程序:// ChatClient.javaimport java.awt.*;import java.awt.event.*;import .*;import java.io.*;import javax.swing.*;public class ChatClient extends JApplet implements Runnable {private JLabel clientLabel;private int clientID;private JTextField inputField;private JTextArea displayArea;private Socket connection;private DataInputStream input;private DataOutputStream output;// Set up user-interfacepublic void init(){Container container = getContentPane();JPanel panel1,panel2;panel1 = new JPanel();clientLabel=new JLabel("Client ");inputField =new JTextField(20); //inputField用于输入用户聊天信息inputField.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent e) {try {output.writeUTF(inputField.getText()); //发送用户输入的聊天信息到server}catch ( IOException ioException ) {ioException.printStackTrace();}}});panel1.setLayout(new FlowLayout());panel1.add(clientLabel );panel1.add( inputField );container.add(panel1,BorderLayout.NORTH);panel2 = new JPanel();displayArea = new JTextArea( 10, 30 );displayArea.setEditable( false );panel2.add( new JScrollPane( displayArea ), BorderLayout.CENTER );container.add(panel2,BorderLayout.CENTER );} // end method init// Make connection to server and get associated streams.// Start separate thread to allow this applet to// continually update its output in textarea display.public void start(){// connect to server, get streams and start commThreadtry {// make connectionconnection = new Socket( getCodeBase().getHost(), 50000 );// get streamsinput = new DataInputStream( connection.getInputStream() );output = new DataOutputStream( connection.getOutputStream() );}// catch problems setting up connection and streamscatch ( IOException ioException ) {ioException.printStackTrace();}// create and start output threadThread commThread = new Thread( this );commThread.start();} // end method start// control thread that allows continuous update of displayAreapublic void run(){// get client identifiertry {clientID = input.readInt(); // 读server发送来的用户clientID// display clientID in event-dispatch threadSwingUtilities.invokeLater(new Runnable() {public void run(){clientLabel.setText( "客户" + clientID );}});while ( true ) { //循环聊天的各个用户发送来的信息,并显示String message=input.readUTF();displayMessage( message );}} // end trycatch( EOFException ioException ) {displayMessage( "Server terminated connection" );}// process problems communicating with servercatch ( IOException ioException ) {ioException.printStackTrace();}} // end method runprivate void displayMessage( final String messageToDisplay ){// display message from event-dispatch thread of executionSwingUtilities.invokeLater(new Runnable() { // inner class to ensure GUI updates properlypublic void run() // updates displayArea{displayArea.append( messageToDisplay +"\n");displayArea.setCaretPosition(displayArea.getText().length() );}} // end inner class); // end call to SwingUtilities.invokeLater}} // end classApplication程序import .*;import java.io.*;public class ChatServer{ private int clientNum=0; //当前连接的用户数private int maxClients=10;//允许连接的用户最大数private ServerSocket ss;private CommunicationThread communications[];public ChatServer(){try {ss = new ServerSocket( 50000, maxClients );}// process problems creating ServerSocketcatch( IOException ioException ) {ioException.printStackTrace();System.exit( 1 );}communications=new CommunicationThread [maxClients];for (int i=0;i<maxClients;i++) //循环等待用户连接{ try {//等待用户连接,连接成功时创建server端通信线程并启动它communications[i]=new CommunicationThread(ss.accept(),i);communications[i].start();clientNum++;}catch( IOException ioException ) {ioException.printStackTrace();System.exit( 1 );}}}private class CommunicationThread extends Thread {private Socket socket;private int clientID;private DataInputStream input;private DataOutputStream output;public CommunicationThread(Socket ss,int number) {socket=ss; //取连接SocketclientID=number; //取分配给用户的IDtry {//从Socket得到输入/输出流input = new DataInputStream( socket.getInputStream() );output = new DataOutputStream( socket.getOutputStream() );}catch( IOException ioException ) {ioException.printStackTrace();System.exit( 1 );}}public void run() {try {//String s=null;//s=s+clientId;output.writeInt(clientID); //给用户发送clientID }catch( IOException ioException ) {ioException.printStackTrace();System.exit( 1 );}while (true) { //循环读一用户clientID发送来的信息,发送给聊天的各个用户try {String message=input.readUTF(); //读用户clientID发送来的信息for (int i=0;i<clientNum;i++) { //发送给聊天的各个用户communications[i].output.writeUTF(" 客户"+clientID+":"+message);}//用户clientIDID发送的信息是"Bye",则用户ID结束聊天if (message.equals("Bye")) break;}catch( IOException ioException ) {ioException.printStackTrace();System.exit( 1 );}}try {output.close();input.close();socket.close();}catch( EOFException ioException ) {System.err.println( "Client terminated connection" );}catch( IOException ioException ) {ioException.printStackTrace();System.exit( 1 );}}}public static void main(String[] args){new ChatServer();}}2.在DOS环境下编译和运行Application和Applet程序;3.依据所做实验写实验报告。

java课程设计报告(java聊天室)

java课程设计报告(java聊天室)

Java聊天室课程设计一、需求分析1.1开发背景在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。

网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。

网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。

在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。

而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

目前较为流行的网络编程模型是客户机/服务器(C/S)结构。

即通信双方一方作为服务器等待客户提出请求并予以响应。

客户则在需要服务时向服务器提出申请。

服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。

1.2设计要求本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。

1.3设计目的通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。

能将相关的只是运用到相关的实践中去。

1.4功能实现服务器的主要功能有1)在特定端口上进行侦听,等待客户连接2)用户可以配置服务器的真挺端口3)向已经连接服务器的客户发送系统消息4)统计在线人数5)当停止服务时,断开所有用户的连接客户端的主要功能1)连接到已经开启聊天服务的服务端2)用户可以配置要连接服务器端的ip地址和端口号3)用户可以配置连接后显示的用户名4)当服务器开启时。

Java聊天室课程设计报告

Java聊天室课程设计报告

UML课程设计题目网络聊天程序开发设计与实现学号:*************名:***指导教师:完成时间:2017年 12月目录1.摘要 (2)2.绪论 02.开发环境 03.需求分析 (1)3.1程序简介 (1)3.2程序功能 (1)4.系统设计 (2)4.1概要设计 (2)4.2详细设计 (2)5.测试 (7)6.结论 (9)参考文献 (10)摘要本次训练主要是考查了对JA V A程序设计的综合运用,设计一个Socket 通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。

本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。

本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JA V A编程的东西,来便于以后可以使用。

关键词:java聊天1.绪论对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。

还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。

如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。

现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。

而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。

现在我就用JA V A语言编写一个简单的程序——Java聊天程序。

将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。

(完整word版)Java聊天室系统程序设计实验报告

(完整word版)Java聊天室系统程序设计实验报告

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

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大作业设计报告-JAVA聊天室

JAVA程序设计多人聊天室:?#1设计目的Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和静态的语言。

本次课程设计旨在应用JAVA编程语言中的网络通信,多线程,数据库编程,图形界面编程等技术实现一个基本的多人在线网络聊天室。

并以此巩固JAVA基础知识,体会面向对象的设计方法。

2》3平台要求3.1使用:搭载JAVA运行环境的平台即可。

3.2开发环境:Windows10 64bitJDKEclipse¥Window Builder4需求分析管理员:启动服务器,关闭服务器,强制用户退出,聊天房间增添改查。

用户:GUI,注册,登陆,聊天等。

用例图:SystemUserAdministratorServerClientDatabaseHouse delete or addUser logoutLogin and logoutChatEnter and leaveHouseUser Info get and setSign UpStart up server5 概要设计5.1 服务器设计?将客户端的请求抽象化,每种请求服务器都会产生一个特定的类的对象去处理它。

服务器负责接受客户端请求,根据请求内容完成指定工作。

为提高效率,采用多线程结合线程池设计技术,对于每个请求在线程池内得到一个线程去处理请求。

如图3-1所示。

5.2 客户端设计聊天室中一个事物的过程基本流程是:用户产生动作,客户端发送消息,服务器接收并处理,服务器返回处理结果,GUI 根据结果进行显示的更新。

客户端只在GUI 中采用多线程设计。

而对服务器回应的接受都是单线程的因为只有一个服务器为自己服务,且在接收数据过程中连接是不可断开的。

客户端的设计如图3-2所示。

一次事物流程中的步骤编号在图中给出。

&图 5-2客户端概要图6 详细设计6.1 服务器详细设计服务器要完成的任务是接受客户请求并在自己维护的数据结构上进行相应处理最终将处理结果返回给客户端。

java简易聊天室课程设计

java简易聊天室课程设计

java简易聊天室课程设计一、课程目标知识目标:1. 让学生掌握Java网络编程基础知识,理解TCP/IP协议和Socket通信原理;2. 学会使用Java语言构建简易聊天室程序,了解客户端与服务器之间的数据传输过程;3. 了解多线程编程在聊天室中的应用,掌握线程的创建、同步与通信方法。

技能目标:1. 培养学生运用所学知识解决实际问题的能力,具备独立设计并实现简易聊天室程序的能力;2. 提高学生的编程实践能力,学会使用调试工具分析问题、解决问题;3. 培养学生的团队协作能力,学会在项目开发中分工合作、共同进步。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,提高学习积极性;2. 培养学生勇于尝试、善于思考、面对问题主动解决的良好习惯;3. 增强学生的网络安全意识,学会在聊天过程中保护个人隐私。

分析课程性质、学生特点和教学要求,本课程旨在通过实际操作,让学生深入了解Java网络编程知识,掌握简易聊天室的设计与实现。

课程目标具体、可衡量,便于学生和教师在教学过程中明确预期成果,为后续教学设计和评估提供依据。

1. Java网络编程基础:讲解TCP/IP协议,Socket通信原理,以及常用类和方法;- 课本章节:第五章 网络编程,第1-2节;- 内容安排:网络通信基本概念,Socket编程,ServerSocket编程。

2. 简易聊天室设计与实现:- 课本章节:第五章 网络编程,第3-4节;- 内容安排:客户端与服务器程序设计,多线程实现,字符串处理,异常处理。

3. 聊天室功能拓展:- 课本章节:第五章 网络编程,第5节;- 内容安排:文件传输,用户列表管理,消息加密与解密。

4. 调试与优化:- 课本章节:第六章 异常处理与调试,第1-2节;- 内容安排:使用调试工具,分析问题,优化代码,提高程序稳定性。

5. 项目实践:- 课本章节:第五章 网络编程,第六章 异常处理与调试;- 内容安排:分组进行项目实践,完成简易聊天室程序设计与实现,进行功能拓展和优化。

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

UML课程设计题目网络聊天程序开发设计与实现学号:*************名:***指导教师:完成时间:2017年 12月目录1.摘要 (2)2.绪论 02.开发环境 03.需求分析 (1)3.1程序简介 (1)3.2程序功能 (1)4.系统设计 (2)4.1概要设计 (2)4.2详细设计 (2)5.测试 (7)6.结论 (9)参考文献 (10)摘要本次训练主要是考查了对JA V A程序设计的综合运用,设计一个Socket 通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。

本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。

本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JA V A编程的东西,来便于以后可以使用。

关键词:java聊天1.绪论对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。

还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。

如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。

现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。

而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。

现在我就用JA V A语言编写一个简单的程序——Java聊天程序。

将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。

这不仅能锻炼我的实践能力,同时也进一步复习和巩固了我所学的理论知识。

对以前没有学好的还有督促和促进作用。

而且,根据需要,还可以了解一些课外的知识。

增加自己的知识面。

2.开发环境在开发此聊天程序时,该项目所使用的软件开发环境如下:操作系统:Windows 7开发工具:eclipse3.2及其VE插件Eclipse简介Eclipse 是一个开放源代码的、基于Java 的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse 附带了一个标准的插件集,包括Java 开发工具。

Eclipse是著名的跨平台的自由集成开发环境(IDE)。

最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。

Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。

许多软件开发商以Eclipse为框架开发自己的IDE。

Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。

IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。

目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。

Eclipse是一个开发源码项目,它其实是Visual Age for Java 的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。

近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse 将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。

3.需求分析3.1程序简介随着网络技术的发展,人们越来越多的依赖于网络,为了方便人们的生活,网络聊天自然成为了热点,各种工具到处都是。

此程序便是模仿其他聊天工具设计的,当然只是实现了比较少的功能,可以进行基本的聊天。

3.2 程序功能该程序功能:该程序分为2个部分,一个是客户端程序,一个是服务端程序,需要先开启服务器,再开启客户端才能使用,客户端程序提供了相互通信、清空聊天记录的等功能,服务端则用于接受客户端的请求,记录客户端的信息等。

4.系统设计4.1概要设计此聊天程序共有2个部分,客户端和服务器。

客户端中包含了1个Java文件,为主类client.java,;服务器端只有一个主类Server.java。

程序流程图:服务器程序结构客户端程序结构4.2详细设计(1)服务器程序实现本程序采用的是Socket通信来设计的,建立一个主类Server.java,其中主类中还包括服务器线程然后在其构造方法加载程序所需的组件,构造方法如下:public ClientThread(Socket socket) {try {this.socket = socket;reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream());// 接收客户端的基本用户信息String inf = reader.readLine();StringTokenizer st = new StringTokenizer(inf, "@");user = new User(st.nextToken(), st.nextToken());// 反馈连接成功信息writer.println(user.getName() + user.getIp() + "与服务器连接成功!");writer.flush();// 反馈当前在线用户信息if (clients.size() > 0) {String temp = "";for (int i = clients.size() - 1; i >= 0; i--) {temp += (clients.get(i).getUser().getName() + "/" + clients.get(i).getUser().getIp())+ "@";}writer.println("USERLIST@" + clients.size() + "@" + temp);writer.flush();}// 向所有在线用户发送该用户上线命令for (int i = clients.size() - 1; i >= 0; i--) {clients.get(i).getWriter().println("ADD@" + user.getName() + user.getIp());clients.get(i).getWriter().flush();}} catch (IOException e) {e.printStackTrace();}}@SuppressWarnings("deprecation")public void run() {// 不断接收客户端的消息,进行处理。

String message = null;while (true) {try {message = reader.readLine();// 接收客户端消息if (message.equals("CLOSE"))// 下线命令{contentArea.append(this.getUser().getName()+ this.getUser().getIp() + "下线!\r\n");// 断开连接释放资源reader.close();writer.close();socket.close();// 向所有在线用户发送该用户的下线命令for (int i = clients.size() - 1; i >= 0; i--) {clients.get(i).getWriter().println("DELETE@" + user.getName());clients.get(i).getWriter().flush();}listModel.removeElement(user.getName());// 更新在线列表// 删除此条客户端服务线程for (int i = clients.size() - 1; i >= 0; i--) {if (clients.get(i).getUser() == user) {ClientThread temp = clients.get(i);clients.remove(i);// 删除此用户的服务线程temp.stop();// 停止这条服务线程return;}}} else {dispatcherMessage(message);// 转发消息}} catch (IOException e) {e.printStackTrace();}}}其运行截图如下图所示:(2)、客户端主程序本程序使用了默认的卡片布局方式,对窗口的大小进行设置,让聊天窗口能够居中显示,以及登录主窗口类。

实现窗口布局功能和类的调用功能的主要代码如下:* 连接服务器** @param port* @param hostIp* @param name*/public boolean connectServer(int port, String hostIp, String name) {// 连接服务器try {socket = new Socket(hostIp, port);// 根据端口号和服务器ip建立连接writer = new PrintWriter(socket.getOutputStream());reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 发送客户端用户基本信息(用户名和ip地址)sendMessage(name + "@" + socket.getLocalAddress().toString());// 开启接收消息的线程messageThread = new MessageThread(reader, textArea);messageThread.start();isConnected = true;// 已经连接上了return true;} catch (Exception e) {textArea.append("与端口号为:" + port + " IP地址为:" + hostIp+ " 的服务器连接失败!" + "\r\n");isConnected = false;// 未连接上return false;}}(5)、聊天窗口程序设计程序提供了发送文字和关闭聊天的的简单功能。

相关文档
最新文档