聊天室程序设计报告
Java聊天室程序设计报告

《Java之聊天室制作》总结报告姓名 __赵其国___________________学号 __2_____________班级 __嵌入式一班__ _____________二〇一二年十二月二十日一,设计目的为了更好的巩固输入输出流,窗体设计,多线程运用,网络通信设计方面的知识。
把所学的课程及相关知识加以融会贯通。
二,设计内容设计的聊天室能实现用户登录,显示登录用户列表,以及发送聊天信息和显示聊天信息的功能。
并可以选择接收信息的用户进行单发或群发的功能,运行程序,登录服务器后,可以从列表中选择单个或多个用户进行聊天,它是图形界面,线程,流和文件系统等技术的综合使用。
三,概要设计实现的功能:1,启动服务器端,接收客户端发来的信息,并在服务器端窗体显示客户端聊天信息,再吧信息返给在线用户,窗体背景色为粉色2,启动客户端窗体,窗体背景色为粉色3,用户名编辑框输入用户名,设置字体显红色,单击登录按钮,在显示在线用户列表内显示用户名,同时用户名编辑框不能编辑4,发送编辑框输入发送内容,单击发送按钮,启动输出流,把信息发送出去,同时把发出的信息追加到聊天内容文本域内,显示用户名,时间和发送内容。
5,单击退出按钮,运用File类和JfileChooser类实现聊天信息的保存6,聊天信息文本域,在线用户显示域和发送信息的文本域加了滚动条,其中聊天信息文本域,发送信息的文本域的文字能自动换行。
7,别的客户端发来信息是通过输入流读取信息,并截取发来信息的用户名及信息,用户名加到在线用户列表上显示在线,信息追加到聊天内容文本域内,显示用户名,时间和发送内容。
功能不足之处:1,保存聊天信息保存为text格式的有黑块。
保存为Doc格式的要转码不能直接打开2,用户在线显示,只能在用户发送信息时别的用户才能得到在线的用户名,然后再加到在线用户列表中,显示用户在线。
3,聊天室只适合群聊,没有实现技能群聊又能和单个人聊天的功能4,用户输出“退出”后在线用户列表中就会把用户删除,不过没有实现没找到错误出在哪里。
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的相关知识有详细的了解和充分的认识。
能将相关的只是运用到相关的实践中去。
页脚内容11.4功能实现聊天室共分为客户端和服务端两部分,服务器程序主要负责侦听客户端发来的消息,客户端需要登录到相应的服务器才可以实现正常的聊天功能。
服务器的主要功能有1)在特定端口上进行侦听,等待客户连接2)用户可以配置服务器的真挺端口3)向已经连接服务器的客户发送系统消息4)统计在线人数5)当停止服务时,断开所有用户的连接客户端的主要功能1)连接到已经开启聊天服务的服务端2)用户可以配置要连接服务器端的ip地址和端口号3)用户可以配置连接后显示的用户名4)当服务器开启时。
Java聊天室程序设计报告

计算机与信息科学系课程设计报告课程名称:面向对象程序设计—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课程设计报告题目聊天室程序设计学号专业授课班号学生姓名指导教师完成时间题目:设计一个聊天室系统,实现多人一起聊天。
一.引言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的支持,其余步骤均用默认值。
聊天室系统设计报告

聊天室系统设计报告青岛科技大学操作系统课程设计学生班级计算机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服务,并明确要连接的服务器。
聊天室程序设计报告

实验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课程设计报告聊天室一、课程目标知识目标:1. 学生能理解网络编程的基本概念,掌握JAVA Socket编程的基础知识。
2. 学生能运用面向对象编程思想,设计并实现聊天室客户端与服务器的数据传输功能。
3. 学生了解并掌握多线程技术在网络编程中的应用。
技能目标:1. 学生能运用所学知识,独立编写并调试简单的聊天室程序。
2. 学生具备分析问题、解决问题的能力,能针对聊天室程序进行优化和改进。
3. 学生能在团队协作中发挥自己的作用,与他人共同完成一个完整的网络编程项目。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习JAVA的自信心。
2. 学生认识到团队合作的重要性,培养良好的团队协作精神。
3. 学生通过编程实践,体验创新与创造的乐趣,培养积极向上的学习态度。
本课程针对高年级学生,结合课本内容,注重理论与实践相结合,以提高学生的实际编程能力为主要目标。
课程要求学生在掌握基本知识的基础上,能够独立完成实际项目,培养其分析问题、解决问题的能力。
同时,课程强调团队协作,使学生学会与他人共同进步,共同成长。
通过本课程的学习,使学生达到知识、技能和情感态度价值观的全面提升。
二、教学内容1. 网络编程基础理论:介绍网络编程的基本概念,包括IP地址、端口号、协议等,使学生理解网络通信的基本原理。
- 教材章节:第三章 网络编程基础2. JAVA Socket编程:讲解Socket编程的原理,指导学生掌握客户端与服务器之间的数据传输方法。
- 教材章节:第四章 Socket编程3. 面向对象编程:运用面向对象编程思想,设计聊天室程序,包括类的定义、封装、继承与多态。
- 教材章节:第二章 面向对象编程基础4. 多线程技术:介绍多线程编程的概念,分析在聊天室程序中如何实现多用户并发通信。
- 教材章节:第五章 多线程编程5. 聊天室程序设计与实现:指导学生完成聊天室客户端与服务器的编写,实现基本的功能需求。
Java聊天室系统程序设计实验报告

Java聊天室系统程序设计实验报告院(系):信息与通信工程系专业:计算机应用技术班级:学号:姓名:指导老师:2013/6/8目录第一部分:系统设计总述............................................................................1.设计目的:......................................................................................2.设计总体要求:..................................................................................3.实现目的:...................................................................................... 第二部分:系统需求分析............................................................................1.系统任务描述....................................................................................2.系统功能分析....................................................................................3.系统可行性分析.................................................................................. 第三部分:系统设计................................................................................1.系统总体结构设计................................................................................2.系统主体的处理流程..............................................................................3.系统流程逻辑.................................................................................... 第四部分:代码分析................................................................................1.服务器端部分代码................................................................................2.客户端部分代码.................................................................................. 第五部分:系统的具体实现..........................................................................界面设计.......................................................................................... 第六部分:小结.................................................................................... 第七部分:参考文献................................................................................ 第一部分:系统设计总述1.设计目的:1.在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计特性的理解。
- 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(),调换位置就好了。
在实现监听不同的客户连接请求时,由于监听一个请求之后,代码就进入该用户与服务器的消息处理循环中,只要这个客户不下线,将不会退出循环,这样将导致不能监听其他客户,后来采用了在监听线程中,当接受一个请求后,再开启一个一样的监听线程,这样就可以不断的监听了。