聊天室程序设计报告
Java聊天室程序设计报告
![Java聊天室程序设计报告](https://img.taocdn.com/s3/m/d612950d376baf1ffd4fad16.png)
《Java之聊天室制作》总结报告姓名 __赵其国___________________学号 __2_____________班级 __嵌入式一班__ _____________二〇一二年十二月二十日一,设计目的为了更好的巩固输入输出流,窗体设计,多线程运用,网络通信设计方面的知识。
把所学的课程及相关知识加以融会贯通。
二,设计内容设计的聊天室能实现用户登录,显示登录用户列表,以及发送聊天信息和显示聊天信息的功能。
并可以选择接收信息的用户进行单发或群发的功能,运行程序,登录服务器后,可以从列表中选择单个或多个用户进行聊天,它是图形界面,线程,流和文件系统等技术的综合使用。
三,概要设计实现的功能:1,启动服务器端,接收客户端发来的信息,并在服务器端窗体显示客户端聊天信息,再吧信息返给在线用户,窗体背景色为粉色2,启动客户端窗体,窗体背景色为粉色3,用户名编辑框输入用户名,设置字体显红色,单击登录按钮,在显示在线用户列表内显示用户名,同时用户名编辑框不能编辑4,发送编辑框输入发送内容,单击发送按钮,启动输出流,把信息发送出去,同时把发出的信息追加到聊天内容文本域内,显示用户名,时间和发送内容。
5,单击退出按钮,运用File类和JfileChooser类实现聊天信息的保存6,聊天信息文本域,在线用户显示域和发送信息的文本域加了滚动条,其中聊天信息文本域,发送信息的文本域的文字能自动换行。
7,别的客户端发来信息是通过输入流读取信息,并截取发来信息的用户名及信息,用户名加到在线用户列表上显示在线,信息追加到聊天内容文本域内,显示用户名,时间和发送内容。
功能不足之处:1,保存聊天信息保存为text格式的有黑块。
保存为Doc格式的要转码不能直接打开2,用户在线显示,只能在用户发送信息时别的用户才能得到在线的用户名,然后再加到在线用户列表中,显示用户在线。
3,聊天室只适合群聊,没有实现技能群聊又能和单个人聊天的功能4,用户输出“退出”后在线用户列表中就会把用户删除,不过没有实现没找到错误出在哪里。
java课程设计报告(java聊天室)
![java课程设计报告(java聊天室)](https://img.taocdn.com/s3/m/1a19615bfab069dc5122011d.png)
Java聊天室课程设计一、需求分析1.1开发背景在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。
网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。
在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。
而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
目前较为流行的网络编程模型是客户机/服务器(C/S)结构。
即通信双方一方作为服务器等待客户提出请求并予以响应。
客户则在需要服务时向服务器提出申请。
服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。
1.2设计要求本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。
1.3设计目的通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。
能将相关的只是运用到相关的实践中去。
页脚内容11.4功能实现聊天室共分为客户端和服务端两部分,服务器程序主要负责侦听客户端发来的消息,客户端需要登录到相应的服务器才可以实现正常的聊天功能。
服务器的主要功能有1)在特定端口上进行侦听,等待客户连接2)用户可以配置服务器的真挺端口3)向已经连接服务器的客户发送系统消息4)统计在线人数5)当停止服务时,断开所有用户的连接客户端的主要功能1)连接到已经开启聊天服务的服务端2)用户可以配置要连接服务器端的ip地址和端口号3)用户可以配置连接后显示的用户名4)当服务器开启时。
Java聊天室程序设计报告
![Java聊天室程序设计报告](https://img.taocdn.com/s3/m/7a38a64f59eef8c75fbfb3aa.png)
计算机与信息科学系课程设计报告课程名称:面向对象程序设计—Java 设计题目: Java聊天室程序专业:学号:姓名:指导老师:提交时间:2009-6-20目录第一章可行性分析报告 (3)1.1 引言 (3)1.1.1 编写目的 (4)1.1.2项目背景 (4)1.1.3参考资料 (4)1.2 可行性分析 (5)1.2.1系统简要描述 (5)1.2.2系统流程图 (5)1.2.3经济可行性分析 (5)第二章需求规格说明书 (7)2.1 编写目的 (8)2.2 数据描述 (8)2.2.1文字叙述 (9)2.2.2系统数据流图 (9)2.3 功能划分 (9)第三章概要设计说明书 (9)3.1 总体设计 (9)3.1.1总体结构设计 (9)3.2.接口设计 (11)3.3 数据结构设计 (11)3.3 运行设计 (12)3.4 维护设计 (12)第四章详细设计说明书 (12)4.1 总体设计 (12)4.1.1需求概要 (13)4.1.2软件结构 (13)4.2 模块程序流程 (13)4.2.1用户登录模块 (13)4.2.2注册模块 (14)4.2.3系统总体流程图 (15)第五章编码测试与实现说明 (15)5.1 功能模块的测试 (15)5.2 工作的过程 (16)5.3 软件设计效果 (16)第六章设计问题总计 (19)第七章总结 (19)可行性分析报告1.引言1.1编写目的:可行性研究的目的是为了对问题进行研究,以最小的代价在最短时间内确定问题是否可解。
经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。
明确开发风险及其所带来的经济效益。
本报告经审核后,交软件经理审查。
1.2 项目背景:开发软件名称:Java聊天室小软件项目任务提出者:**高校项目开发者:***软件开发小组用户:**高校实现软件单位:**高校项目与其他软件,系统的关系:开发环境:本项目采用客户机/服务器原理,服务器端采用Windows XP为操作系统的工作站,客户端的程序是建立在Window XP系统上,在JDK1.5上开发,JAVA程序工程采用JCreator、Elipse 为编程工具进行开发。
MFC课程设计报告-聊天室程序设计模板
![MFC课程设计报告-聊天室程序设计模板](https://img.taocdn.com/s3/m/6932045bbe1e650e52ea994e.png)
河海大学计算机及信息工程学院MFC课程设计报告题目聊天室程序设计学号专业授课班号学生姓名指导教师完成时间题目:设计一个聊天室系统,实现多人一起聊天。
一.引言1.1开发背景随着网络信息时代的来临,INTERNET应用越来越广泛,人们越来越习惯于在网上获取和交流信息。
据调查显示,80%以上的人上网都会打开聊天工具来聊天,而几乎每一个年轻人都会去聊天。
使用网上聊天已经成为现代年轻人一种新的交往方式。
聊天室更适合于陌生人之间进行较为主观、感兴化的讨论。
所以有大部分的人会进入聊天室聊天,它会给人一个完全自由的聊天世界。
因此我联系所学的MFC 知识,决定做一个简易的聊天室程序。
1.2开发环境以及运行环境1.2.1 开发环境●Intel® Pentium® 4 2.0GHz,512M内存,80G硬盘●Mi crosoft® Windows™ XP Professional●Microsoft® Visual C++ 6.01.2.2 运行环境●Intel® Pentium® 2及以上处理器,32M以上内存,4G以上硬盘●Microsoft® Windows™ XP操作系统●800*600或以上的屏幕分辨率二.需求分析1、用WINSOCK实现简单的网络聊天;2、在MFC开发平台上编写一个聊天系统;3、得server和client之间可以相互通信;4、多人能够发送信息至服务器,首先显示进入聊天室的成员名,然后显示对方名字和聊天信息,可以并发执行。
三、算法分析建立连接过程流程图如下:Server端Client端创建CClientSocket对象,在某个端口提供监听服务等待来自Client端的服务请求接受Client端的请求,用返回的CClientSocket建立连接向用CClientSocket连接建立的流中读写数据关闭CClientSocket,结束与当前Client的通信,等待其他请求关闭CClientSocket对象,结束监听服务创建CChatSocket对象,向Server的监听端口发出请求向用CChatSocket连接建立的流中读写数据关闭CChatSocket,结束与当前Server端的通信建立连接拆除链路数据通路四、详细设计程序个模块代码如下:1.客户端(1)通过AppWizard生成基于对话框的应用程序ChatClient,在向导的第二步选择WindowsSockets的支持,其余步骤均用默认值。
聊天室系统设计报告
![聊天室系统设计报告](https://img.taocdn.com/s3/m/c6e0b38c14791711cd791789.png)
聊天室系统设计报告青岛科技大学操作系统课程设计学生班级计算机132班学生学号1308010204学生姓名王永远2016 5 18______年 ___月 ___日设计题目:聊天室系统一、设计目的及要求1.1设计目的通过该聊天室系统,掌握网络编程的概念及基于网络的C/S模式软件系统开发,掌握基于TCP协议的Socket编程,掌握Java的多线程机制。
1.2设计要求:实现多个用户之间类似于QQ的聊天程序,有聊天界面,多用户之间既可以实现群聊,也可以单独聊天。
二、技术背景2.1网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
2.2网络通信(1)IP地址:网络中设备的标识,不易记忆,可用主机名要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,在TCP/IP协议中,这个标识号就是IP地址。
(2)端口号:用于标识进程的逻辑地址物理端口网卡口逻辑端口我们指的就是逻辑端口A:每个网络程序都会至少有一个逻辑端口B:用于标识进程的逻辑地址,不同进程的标识C:有效端口:0~65535,其中0~1024系统使用或保留端口。
(3)传输协议:通信的规则,常见的有UDP,TCP UDP:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。
TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。
2.3 Socket(1)Socket套接字网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
(2)Socket原理机制A:通信的两端都有Socket。
B:网络通信其实就是Socket间的通信。
C:数据在两个Socket间通过IO传输。
2.4 TCP传输(1)客户端思路A建立客户端的Socket服务,并明确要连接的服务器。
聊天室程序设计报告
![聊天室程序设计报告](https://img.taocdn.com/s3/m/ac0a3861856a561252d36fb3.png)
实验5 掌握简单的网络通讯技术实验6 掌握基于典型协议的的网络通讯技术一实验目的1.熟悉Socket的通讯机制,了解网络程序的设计方法。
2. 熟悉典型协议的通讯机制,掌握基于它们的网络系统设计方法。
如TCP、UDP。
二实验环境1.Windows72.Visual C++ 6.0三实验程序设计1.实验原理1.C/S模式C/S模式是指一个服务器同时为多个客户端服务。
并发性是C/S模式的的基础,正是由于并发性的支持,多个客户端能够获得同一种服务,而不必等待服务器完成对上一个请求的处理。
在C/S模式中,当请求到达服务器时,服务器将它交给一个控制线程,它能与已有的线程并发的执行。
在设计并发服务器时,一般服务器代码由两部分组成,第一部分代码负责监听并接收客户端的请求,还负责为客户端请求创建新的服务线程;另一部分代码负责处理单个客户机请求,如与客户机交换数据,提供具体服务。
下图所示为服务器创建多个线程来为多个客户机服务。
2.基于TCP的socket通信服务器与客户端是通过套接字来进行通信的。
在基于TCP的网络通信程序中,首先服务器端通过socket()函数创建套接字,然后通过bind()函数来命名套接字,调用listen()函数开启服务器端的监听。
接着执行accept()函数来接收客户的连接,服务器阻塞等待客户连接请求,直到有客户请求连接。
客户端创建套接字,接着通过connect()函数请求连接服务器,连接成功后,就可以与服务器进行通信了。
服务器与客户机通过send()各recv()调用来进行信息的发送和接收。
只有当有信息可接收时,recv()才返回,否则将阻塞。
通信完后,服务器和客户机各自通过closesocket()函数来关闭套接字。
注:以上讲的是阻塞模式。
下图所示的是基于TCP的网络通信模式。
服务器端对于连接套接字2.系统设计实验5要求在客户机和服务器传输图片和文件,如果是图片则显示,是文件则保存。
这个实验中的客户机与服务器可以没有区别,即可以采用对等的模式,双方既可以是服务器也可以是客户机。
JAVA课程设计报告聊天室
![JAVA课程设计报告聊天室](https://img.taocdn.com/s3/m/452454b1b9f67c1cfad6195f312b3169a551ea78.png)
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聊天室系统程序设计实验报告](https://img.taocdn.com/s3/m/8576d6bdf61fb7360b4c65fc.png)
Java聊天室系统程序设计实验报告院(系):信息与通信工程系专业:计算机应用技术班级:学号:姓名:指导老师:2013/6/8目录第一部分:系统设计总述............................................................................1.设计目的:......................................................................................2.设计总体要求:..................................................................................3.实现目的:...................................................................................... 第二部分:系统需求分析............................................................................1.系统任务描述....................................................................................2.系统功能分析....................................................................................3.系统可行性分析.................................................................................. 第三部分:系统设计................................................................................1.系统总体结构设计................................................................................2.系统主体的处理流程..............................................................................3.系统流程逻辑.................................................................................... 第四部分:代码分析................................................................................1.服务器端部分代码................................................................................2.客户端部分代码.................................................................................. 第五部分:系统的具体实现..........................................................................界面设计.......................................................................................... 第六部分:小结.................................................................................... 第七部分:参考文献................................................................................ 第一部分:系统设计总述1.设计目的:1.在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计特性的理解。
聊天室程序设计报告
![聊天室程序设计报告](https://img.taocdn.com/s3/m/25a7d989284ac850ad02428c.png)
实验5 掌握简单的网络通讯技术实验6 掌握基于典型协议的的网络通讯技术一实验目的1.熟悉Socket的通讯机制,了解网络程序的设计方法。
2. 熟悉典型协议的通讯机制,掌握基于它们的网络系统设计方法。
如TCP、UDP。
二实验环境1.Windows72.Visual C++ 6.0三实验程序设计1.实验原理1.C/S模式C/S模式是指一个服务器同时为多个客户端服务。
并发性是C/S模式的的基础,正是由于并发性的支持,多个客户端能够获得同一种服务,而不必等待服务器完成对上一个请求的处理。
在C/S模式中,当请求到达服务器时,服务器将它交给一个控制线程,它能与已有的线程并发的执行。
在设计并发服务器时,一般服务器代码由两部分组成,第一部分代码负责监听并接收客户端的请求,还负责为客户端请求创建新的服务线程;另一部分代码负责处理单个客户机请求,如与客户机交换数据,提供具体服务。
下图所示为服务器创建多个线程来为多个客户机服务。
2.基于TCP的socket通信服务器与客户端是通过套接字来进行通信的。
在基于TCP的网络通信程序中,首先服务器端通过socket()函数创建套接字,然后通过bind()函数来命名套接字,调用listen()函数开启服务器端的监听。
接着执行accept()函数来接收客户的连接,服务器阻塞等待客户连接请求,直到有客户请求连接。
客户端创建套接字,接着通过connect()函数请求连接服务器,连接成功后,就可以与服务器进行通信了。
服务器与客户机通过send()各recv()调用来进行信息的发送和接收。
只有当有信息可接收时,recv()才返回,否则将阻塞。
通信完后,服务器和客户机各自通过closesocket()函数来关闭套接字。
注:以上讲的是阻塞模式。
下图所示的是基于TCP的网络通信模式。
客户机端服务器端对于监听套接字创建套接字:SOCKET()绑定套接字;BIND()创建套接字:SOCKET()启动监听:LISTEN()请求连接:CONNECT()接受客户的连接请求:ACCEPT()创建新的连接套接字发送数据:WRITE()处理服务器的响应读取数据:READ()关闭套接字:CLOSE()读取数据:READ()处理客户机的服务请求发送数据:WRITE()关闭套接字:CLOSE()关闭套接字:CLOSE()请求连接(第一次握手)接受连接(第二次握手)如果没有已经到达的连接请求,就阻塞,等待客户的连接请求请求服务器服务(第三次握手,同时发送数据)服务器发给客户机的响应对于连接套接字2.系统设计实验5要求在客户机和服务器传输图片和文件,如果是图片则显示,是文件则保存。
聊天程序设计实验报告范文
![聊天程序设计实验报告范文](https://img.taocdn.com/s3/m/c27df10efd4ffe4733687e21af45b307e871f979.png)
聊天程序设计实验报告范文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会写出想要的网络程序,并不是很难。
设计聊天室实验报告
![设计聊天室实验报告](https://img.taocdn.com/s3/m/84e2be7f5b8102d276a20029bd64783e09127d81.png)
设计聊天室实验报告一、实验目的本实验的目的是设计一个基于网络的聊天室,实现多用户之间的实时聊天功能。
通过这个实验,我们可以更好地理解计算机网络通信的原理和网络编程的基本知识,同时提高我们的编程能力和团队协作能力。
二、实验内容1.搭建网络环境首先,我们需要搭建一个网络环境,使得多个用户可以通过网络进行通信。
我们选择使用Socket编程,通过TCP/IP协议进行通信。
我们使用Python语言进行编程,通过socket模块中的函数来创建网络连接。
2.实现用户注册和登录功能在聊天室中,每个用户都需要有自己的账户并进行登录操作。
在实验中,我们使用MySQL数据库来存储用户的账户信息。
用户可以通过注册功能来创建自己的账户,并使用登录功能进行登录。
在用户登录成功后,系统将会为其分配一个唯一标识符,并将其保存在服务端。
3.实现聊天功能在登录成功后,用户可以进入聊天室进行聊天操作。
用户可以发送消息给其他用户,并且可以实时接收其他用户发送的消息。
在实现聊天功能时,我们使用多线程的方式,使得每个用户可以同时进行收发消息的操作。
同时,为了保证消息的有序性,我们使用队列来存储用户发送的消息,并使用互斥锁来保护队列的访问。
4.实现用户列表功能为了方便用户之间的选择和通信,我们实现了用户列表功能。
用户可以查看当前在线的用户,并选择要发送消息的目标用户。
在用户列表中,我们显示用户的昵称和状态信息。
三、实验结果通过本次实验,我们成功实现了基于网络的聊天室,并且完成了所有的实验内容。
实际测试中,我们模拟多个用户在不同的终端进行登录和聊天操作,并得到了预期的结果。
用户可以通过注册功能来创建自己的账户,并通过登录功能进行登录。
登录成功后,用户可以进入聊天室进行聊天操作,并可以看到其他用户发送的消息。
同时,用户也可以选择特定的用户进行私聊。
四、实验总结通过本次实验,我们对计算机网络通信的原理和网络编程有了更深入的了解。
我们学会了如何使用Socket编程进行网络连接,并实现了用户注册、登录、聊天和用户列表等功能。
JAVA课程设计实验报告-“聊天室”报告
![JAVA课程设计实验报告-“聊天室”报告](https://img.taocdn.com/s3/m/6dc9a14376a20029bd642ddc.png)
第二章 聊天室的设计
2.1聊天室的粗略设计分析
聊天系统平台应有两个部分组成:服务端和客户端。服务端主要完成用户信息的存储、客户端命令的接受与响应以及发送系统消息、信息转发、踢人等服务端应有的功能。客户端主要完成聊天信息的发送与接受、登录、注销等功能。
此c/s系统使用的是TCP/IP协议,应用了如下通讯模式:
如果用户名和密码正确的话,则登录聊天室主界面;如果已经在线,则输出已经在线;否则输出用户名和密码错误,需要重新登录或者注册。
在线用户列表
用户登录之后,需要知道系统中,有哪些用户在线,这样可以方便用户选择与个别用户私聊和传送文件,也可以进行公聊。
用户公聊
用户输入的用户名和密码都正确后,则进入聊天室。聊天主界面主要由四大版块组成:公聊的聊天信息、在线用户列表、好友列表,系统消息和聊天的一些操作。
1.2聊天室的基本功能-------------------------------------------------------------3
1.3设计所用参考资料-------------------------------------------------------------6
第二章 聊天室的设计-------------------------------------------6
由于Client使用了流套接字,所以服务程序也要使用流套接字。这就要创建一个ServerSocket对象,接下来服务程序进入无限循环之中,无限循环从调用ServerSocket的accept()方法开始,在调用开始后accept()方法将导致调用线程阻塞直到连接建立。在建立连接后accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。由于存在单个服务程序与多个客户程序通讯的可能,服务程序循环检测是否有客户连接到服务器上,如果有,则创建一个线程来服务这个客户,以此完成对客户端的监听。
java聊天室实验报告
![java聊天室实验报告](https://img.taocdn.com/s3/m/3e643463ae45b307e87101f69e3143323968f51f.png)
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的聊天室应用程序。
聊天室设计报告
![聊天室设计报告](https://img.taocdn.com/s3/m/18a87cfb9fc3d5bbfd0a79563c1ec5da50e2d6ba.png)
聊天室设计报告聊天室设计报告一、简介聊天室作为一种在线交流的工具,已经成为了人们日常生活中不可或缺的一部分。
在如今数字化时代,人们希望能够通过网络与他人进行实时互动,并分享自己的想法和感受。
因此,为了满足人们的需求,我们设计了一款全新的聊天室。
二、功能与特点我们的聊天室主要包含以下功能与特点:1.实时通讯:用户通过聊天室可以与他人进行实时对话,无论是文字、图片、音频还是视频,都可以通过聊天室进行传输和分享。
2.多人群聊:聊天室支持多人同时参与的群聊功能。
用户可以加入不同的群组,与群内成员进行交流,并根据兴趣爱好选择不同的群组参与讨论。
3.私人聊天:用户可以与特定的朋友进行私人聊天,保证对话的隐私与安全性。
4.文件分享:聊天室支持文件的传输和分享。
用户可以将自己的文件发送给对方,方便共享和合作。
5.消息记录:聊天室将保存用户的聊天记录,用户可以随时回顾之前的对话,不会因为信息的过多而丢失重要内容。
6.良好的用户界面:我们的设计师们精心设计了用户界面,简洁直观,方便用户操作与交流。
三、技术实现为了实现以上功能与特点,我们采用了以下技术:1.网络通信:聊天室利用网络通信技术,实现用户之间的实时通讯。
我们采用了TCP/IP协议来进行数据传输,保证信息的稳定和可靠性。
2.数据库管理:为了保存用户的聊天记录和账户信息,我们使用了关系型数据库来进行数据管理。
通过数据库,可以轻松地存储和提取用户的数据。
3.用户认证与安全:我们设计了一套用户认证系统,保证只有合法用户才能够进入聊天室。
同时,我们采用了加密技术,确保用户的对话内容不会被非法获取。
4.多媒体传输:为了支持多种类型的文件传输和分享,我们使用了多媒体传输技术。
用户可以通过聊天室发送和接收图片、音频、视频等多种类型的文件。
四、用户体验与测试在开发过程中,我们注重用户体验,不断优化和改进聊天室的功能和界面。
并通过严格的测试流程,确保聊天室的稳定性和性能。
在实际测试中,我们邀请了一些用户,让他们使用聊天室进行日常交流和互动。
网络聊天程序的设计和实现报告
![网络聊天程序的设计和实现报告](https://img.taocdn.com/s3/m/48d15d9af424ccbff121dd36a32d7375a517c654.png)
网络聊天程序的设计和实现报告一、引言网络聊天程序是一种基于互联网的即时通信工具,它允许用户通过网络实时交流信息。
本报告旨在介绍网络聊天程序的设计和实现过程,包括需求分析、系统设计、功能实现和测试等方面的内容。
二、需求分析1. 用户需求网络聊天程序的用户需求主要包括:- 实时聊天:用户可以通过程序实时发送和接收信息。
- 多人聊天:用户可以同时与多个人进行聊天。
- 好友管理:用户可以添加、删除和查看好友列表。
- 聊天记录:程序应该能够保存聊天记录,方便用户查看历史消息。
- 图片和文件传输:用户可以发送和接收图片、文件等多媒体内容。
- 安全性:程序应该具备一定的安全性,保护用户的聊天信息不被泄露。
2. 系统需求网络聊天程序的系统需求主要包括:- 跨平台兼容性:程序应该能够在不同操作系统上运行,如Windows、Mac、Linux等。
- 稳定性和可靠性:程序应该具备良好的稳定性和可靠性,不易崩溃或丢失数据。
- 用户界面友好:程序的用户界面应该简洁明了,方便用户操作。
- 高并发处理能力:程序应该能够处理大量用户同时在线的情况,保证系统的稳定性和响应速度。
三、系统设计1. 架构设计网络聊天程序的架构设计主要包括客户端和服务器端两部分。
- 客户端:负责用户界面的展示和用户输入的处理,与服务器端进行通信。
- 服务器端:负责接收客户端的请求,处理聊天信息的传输和存储。
2. 数据库设计为了保存用户的聊天记录和好友列表等信息,需要设计数据库来存储这些数据。
数据库的设计应该包括用户表、聊天记录表和好友关系表等。
3. 通信协议设计为了实现实时聊天功能,需要设计通信协议来规定客户端和服务器端之间的数据传输格式和通信规则。
常用的通信协议包括TCP/IP协议和WebSocket协议。
四、功能实现1. 用户注册和登录功能用户在使用网络聊天程序之前,需要进行注册和登录操作。
用户注册时需要提供用户名、密码等信息,并对用户输入进行合法性验证。
基于Visual-C++的聊天室程序设计报告
![基于Visual-C++的聊天室程序设计报告](https://img.taocdn.com/s3/m/0f017402bed5b9f3f90f1c18.png)
1.引言计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。
各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。
随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《TCP/IP协议与网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。
接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。
1.1聊天室程序的开发背景近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的障碍,世界各个角落的人们可以通过Internet收发邮件、实时聊天、获取最新的资讯。
因此本次毕业设计以“面向连接的Winsock网络会话程序开发”为题,制作一个C/S聊天室程序,通过制作该程序还能更好的学习网络socket编程的相关知识。
1.2聊天室的设计目标本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为:服务器端功能:1、初始化socket, 创建服务器端。
2、维护一个链表,保存所有用户的IP地址、端口信息。
3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。
4、接受用户传送来的连接判断命令,并向用户发出响应命令。
客户端功能:客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。
当按下“发送”按钮时将信息发送给服务器。
通过本课题的毕业设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。
并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。
2.总体设计2.1 功能要求✧支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;✧接收客户端发送的消息,并显示在一个列表框中;✧在用户连接上后有提示,显示出连接的用户名字;✧发送信息时可以显示聊天的所有记录;2.3系统主要功能和主要功能描述:服务器端聊天程序必须能够做3件事情:(1)服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。
java聊天室 实验报告
![java聊天室 实验报告](https://img.taocdn.com/s3/m/0280d3cdcd22bcd126fff705cc17552707225efd.png)
java聊天室实验报告Java聊天室实验报告引言:聊天室是一种通过网络连接,允许用户在同一平台上进行实时交流的应用程序。
随着互联网的普及,聊天室成为人们日常生活中不可或缺的一部分。
本实验旨在通过使用Java编程语言,设计和实现一个简单的聊天室应用程序,并探讨其实现过程中所涉及的关键技术和挑战。
一、项目背景随着网络技术的飞速发展,人们对于实时交流的需求不断增加。
聊天室作为一种方便快捷的交流工具,受到了广大用户的欢迎。
本项目旨在利用Java编程语言,实现一个基于网络的聊天室应用程序,以满足用户的实时交流需求。
二、项目目标1. 设计和实现一个基于Java的聊天室应用程序。
2. 实现用户之间的实时消息传递功能。
3. 提供可靠的用户身份验证机制,确保聊天室的安全性。
4. 实现聊天记录的存储和查看功能,方便用户回顾历史消息。
三、技术实现1. 服务器端在服务器端,我们使用Java的Socket编程实现了与客户端的连接和通信。
通过建立一个服务器Socket,监听指定端口,可以接受来自客户端的连接请求。
一旦连接建立,服务器端就会创建一个新的线程来处理该客户端的请求,并实现实时消息的传递和处理。
2. 客户端在客户端,我们同样使用Java的Socket编程实现了与服务器端的连接和通信。
客户端通过建立一个Socket,指定服务器的IP地址和端口号,即可与服务器建立连接。
客户端通过输入消息并发送给服务器,同时接收来自服务器的消息并显示在界面上。
3. 用户身份验证为了确保聊天室的安全性,我们使用了用户身份验证机制。
在用户登录时,客户端将用户名和密码发送给服务器端。
服务器端通过验证用户信息的正确性,返回登录结果给客户端。
只有通过身份验证的用户才能进入聊天室并参与实时交流。
4. 聊天记录存储为了方便用户回顾历史消息,我们实现了聊天记录的存储和查看功能。
服务器端将接收到的消息保存在数据库中,并提供查看聊天记录的接口。
用户可以通过指定时间范围或关键词来查询历史消息,以便回顾和查找需要的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 掌握简单的网络通讯技术实验6 掌握基于典型协议的的网络通讯技术一实验目的1.熟悉Socket的通讯机制,了解网络程序的设计方法。
2. 熟悉典型协议的通讯机制,掌握基于它们的网络系统设计方法。
如TCP、UDP。
二实验环境1.Windows72.Visual C++ 6.0三实验程序设计1.实验原理1.C/S模式C/S模式是指一个服务器同时为多个客户端服务。
并发性是C/S模式的的基础,正是由于并发性的支持,多个客户端能够获得同一种服务,而不必等待服务器完成对上一个请求的处理。
在C/S模式中,当请求到达服务器时,服务器将它交给一个控制线程,它能与已有的线程并发的执行。
在设计并发服务器时,一般服务器代码由两部分组成,第一部分代码负责监听并接收客户端的请求,还负责为客户端请求创建新的服务线程;另一部分代码负责处理单个客户机请求,如与客户机交换数据,提供具体服务。
下图所示为服务器创建多个线程来为多个客户机服务。
2.基于TCP的socket通信服务器与客户端是通过套接字来进行通信的。
在基于TCP的网络通信程序中,首先服务器端通过socket()函数创建套接字,然后通过bind()函数来命名套接字,调用listen()函数开启服务器端的监听。
接着执行accept()函数来接收客户的连接,服务器阻塞等待客户连接请求,直到有客户请求连接。
客户端创建套接字,接着通过connect()函数请求连接服务器,连接成功后,就可以与服务器进行通信了。
服务器与客户机通过send()各recv()调用来进行信息的发送和接收。
只有当有信息可接收时,recv()才返回,否则将阻塞。
通信完后,服务器和客户机各自通过closesocket()函数来关闭套接字。
注:以上讲的是阻塞模式。
下图所示的是基于TCP的网络通信模式。
服务器端对于连接套接字2.系统设计实验5要求在客户机和服务器传输图片和文件,如果是图片则显示,是文件则保存。
这个实验中的客户机与服务器可以没有区别,即可以采用对等的模式,双方既可以是服务器也可以是客户机。
因为没有要求一个对多个服务。
实现实验5中的要求最简单的可以选用基于UDP的对等模式,但是我们小组决定将实验5和实验6的功能集成在一个程序中,所以最后还是选用了基于TPC的网络通信。
由客户机发送文件或图片到服务器,服务器检测到有文件可接收时,提示用户是否要接收来自己客户机的文件或图片,如果接收,则根据文件后缀名来判断文件类型,是图片就打开。
实验5中,难点在于怎么传递和接收文件,怎么判断一个文件是否传或者接收成功了。
在传文件的过程中,我们先组装数据包,在数据包中,我们先传文件标识符,文件标识符是为了和聊天时的消息标识符以及其他自定义的标识符区分接收。
然后再传文件名和文件的大小,最后是文件的内容。
服务器接收时,依次解析出文件标识,文件名,文件大小,文件内容。
图片也是文件,通过后缀名可以识别是图片还是非图片。
实验6要求编写一个多人聊天室系统。
聊天室程序是一个服务器接收来个多个客户端服务请求,这些请求是并发。
采用C/S模式设计,服务器开启一个监听线程来接受来自一个客户端的连接请求,在收到请求后,在这个线程中为这个客户提供交互服务,同时开启另一个监听线程来监听其他客户的连接请求。
这样就实现了服务器为多个不同的客户端提供并发服务。
在设计C/S模式,当客户端很多时,或者并发很大时,阻塞模式是行不通的,因为可能造成多个客户机同时争夺服务器时,有的客户机不能及时得到服务而影响用户体验。
我们小组曾尝试采用非阻塞模式,用了Select模型。
但是由于以前没有网络编程经验、时间有限以及非阻塞模式很复杂,没有成功实现,最后还是采用了阻塞模式。
不过,在实验中,还是没有出现性能问题。
怎么实现多人聊天室通信?首先客户机发送聊天信息到服务器,服务器接收到聊天信息后,在服务器的显示信息,并转发给所有的其他客户机。
服务器可以发送公告信息给所有的客户机。
当客户机下线时,该客户机发送下线标识消息到服务器,由服务器广播到其他客户机。
设计了一个在线客户列表,来同步时实显示在线的客户。
实验中一个要点在于怎么实现同步显示在线客户。
下面将在系统实现中讲述。
3.系统实现这部分主要结合关键代码来讲解系统的实现思路及具体实现,详细代码见附录。
我们小组实验5和实验6是在一个程序中实现的。
(1)服务器与客户端通信服务器开启监听,这部分主要实现创建套接字、命名套接字、套接字监听,然后开启一个监听线程。
m_serversock=socket(AF_INET,SOCK_STREAM,0);//创建ret=bind(m_serversock,(LPSOCKADDR)&addr,sizeof(addr));//绑定ret=listen(m_serversock,10);//监听AfxBeginThread(ListenThread,this); //开启一个监听线程在ListenThread线程中,接收客户端请求,接收阻塞解除后再开启另一个监听线程来监听其他客户机的连接请求。
Clientsock[k].clientsock=accept(pDlg->m_serversock,(sockaddr*)&clientaddr,&clientlen);//接收客户端请求AfxBeginThread(ListenThread,p); //开启另外一个监听线程,监听其他用户连接接下来,接收信息标识符,并根据不同的消息标识符来判断采用相应的处理函数。
char recvflag[3];memset(recvflag,0,3);int flagc=recv(clientsock[k].clientsock,recvflag,2,0);recvflag[2]='\0';CString strflag;strflag.Format("%s",recvflag);自己定义的消息标识符有“QQ”表退出,“MM”表聊天信息,“FF”表文件,“CC”表连PDlg->RecvMessage(clientsock[k].clientsock);//接收聊天消息pDlg->RecvFile(clientsock[k].clientsock);//接收文件消息客户端先创建套接字,然后主动连接服务器,开启一个接收线程来接收来自服务器的信息,在RecvFromServer线程中也是根据消息标识符来作不同的处理的。
m_clientsocket=socket(AF_INET,SOCK_STREAM,0);//创建ret=connect(m_clientsocket,(LPSOCKADDR)&addr,sizeof(addr));//主动连接服务器AfxBeginThread(RecvFromServer,this);//开启接收线程(2)文件发送与接收文件发送的关键代码while (1){ilen = file.Read(temp, 10000);if (ilen==0)break;iEnd = send(pDlg->m_clientsocket,temp,ilen,0);if (iEnd==SOCKET_ERROR){strError.Format("Send File:%d",error=WSAGetLastError());AfxMessageBox(strError);break;}iTmp +=iEnd;}文件接收关键代码long iTemp = 0;while (1){if (lFileSize==iTemp)//结束条件{break;}rcv = recv(s, buffer, 1024, 0);file.Write(buffer, rcv);iTemp += rcv;}打开图片。
用了win7自带的“画图”软件打开图片CString strdll="C:\\Windows\\System32\\mspaint.exe ";strdll+=strPathName;WinExec(strdll,SW_SHOWNORMAL);4.运行界面运行服务器启动监听运行客户端客户端上线客户端与服务器聊天客户端与服务器发送文件和图片多客户聊天客户下线,同步显示四实验感想这两次实验花了大概三个星期的时间,感受很多,学到了很多。
在刚看到实验题目时,我们小组就去学校图书馆借了很多关于计算机网络编程的书来看,查看了一些例子,但是很多例子都不怎么完整,后来,我们开始学习socket编程的理论知识,从对socket通信的基本步骤的学习到对TCP、UDP的比较,以及阻塞与非阻塞模式的比较。
学习了这些理论之后,再来看实例好懂多了,比如理解了accept()函数要阻塞直到有客户端连接请求才返回。
最先是尝试用mfc封闭好的CSocket类来实现网络通信,但是程序写了一些,才发现由于存在各种消息响应,对于了解socket通信的基本原理很不好,封装了一些基本步骤,让我们看不到一些过程。
最后我们还是定用原始的win32 socket调用来实现程序,这样虽然写程序比较复杂,因为要自己按照步骤一步一步实现,自己开线程,但是对于我们深入理解socket通信是很有帮助的。
看了windows socket的程序设计知识,后来我们又找了本Linux程序设计,看了其中的Linux socket,socket最初是在Linux 下应用的,后来windows才有的,所以看了Linux下的更好理解了。
从最开始的基本上写程序都要参照书本,到后来自己不看书实现各种通信,感觉收获了很多。
在系统的设计过程中,我们最初关注的是到底用tcp还是udp,tcp有连接,可靠,udp快易,后来还是决定用tcp,因为tcp可以更好理解通信过程,比如tcp的三次握手。
还有我们的程序是个实验程序,就应用量来说不用考虑tcp和upd的性能问题。
接着我们在设计采用C/S模式时,考虑是用阻塞模式还是非阻塞模式,书上说了,C/s模式在高并发时,阻塞模式是行不通的,会造成大量客户等待服务器,得不到及时的服务。
我们尝试过用Select非阻塞模式,但是太复杂了,没能实现,最后考虑到阻塞模式简单,我们还不怎么熟悉通信程序设计,再者我们的程序并发客户不多,所以还是采用的阻塞模式。
在具体的代码实现过程中,在传送文件过程中,遇到了文件接收是否成功的判断问题,最后仔细调试,发现了问题,在判断结束条件之前阻塞在了recv(),调换位置就好了。
在实现监听不同的客户连接请求时,由于监听一个请求之后,代码就进入该用户与服务器的消息处理循环中,只要这个客户不下线,将不会退出循环,这样将导致不能监听其他客户,后来采用了在监听线程中,当接受一个请求后,再开启一个一样的监听线程,这样就可以不断的监听了。