网络最为通用的API,
也是INTERNET上进行应用开发最为通用的API。
套接字是从英文单词 socket翻译过来的, ( Socket在英文中是插座的意思,在这里设计者实际上是暗指电话插座。
因为在 Socket环境下编程很像是打电话的模拟,Internet的 IP地址就是电话,要打电话,首先要有个电话插座,在程序中就是向系统申请一个 Socket,以后两台机器上的程序"交谈"都是通过这个 Socket来进行的。
对程序员来说,也可以把Socket看成一个文件指针,只要向指针所指的文件读写数据,就可以实现双向通讯。
它是网络通信的基本构件。
套接字是可以被命名和寻址的通信端点,是网络互连终点。
换句话说,网络互连是两个计算机或处理器通过网络相互传输数据。
网络专业人员将每个网络会话的末端称做终点。
若通过套接字接口进行网络互连,则程序在每个网络互连的末端都需要一个套接字,套接字接口相当于文件系统,可以使用 API通过网络软件申请一个可以指定特定套接字的句柄来定义套接字的特性。
当然 ,套接字句柄和文件句柄是不同的,文件句柄指向一个特定的文件和设备,而套接字句柄并不代表一个特定的终点或目标地址。
基于套接字的程序先创建一个套接字,然后再将套接字和目标终点连接起来。
底层的套接字函数是 WinInetAPI的一部分,但使用MFC的 CSocket类,它封装了这些套接字函数。
CSocket类实际上来源于 CAsyncSocket类,但该类编程比较复杂,需要编写底层函数来进行通信操作,而 CSocket为底层函数提供了一个更抽象的封装,替编程者执行对底层函数的操作,简化了Socket编程。
CSocket类提供了一个高级的 Socket支持,运用了 MFC的序列化类来提供和传输 Socket对象。
利用 Socket进行通讯,有两种主要的方式。
一种叫流方式 ( StreamSocket)也称面向连接方式。
在这种方式下,两个通讯的应用程序之间先要建立一种虚拟的连接。
其过程好像客户机在给服务器打电话,只有服务器拿起了听筒,才有可能开始传输数据,这种方式对应的TCP协议。
第二种叫作数据报文方式 (DatagramSocket) ,又称无连接方式 ,这时两台计算机像是把数据放在一封封信里通过网络寄给对方,信在传送的过程中有可能会残缺不全,而且,后发出的信也有可能会先收到,它对应的是 UDP协议[6]。
流方式的特点是,通讯可靠,对数据有校验和重发的机制,通常用来作数据文件的传输如 ftp、telnet等;数据报文方式由于取消了重发校验机制,能够达到较高的通讯速率,可以用作一些对数据可靠性要求不高的通讯 ,如实时的语音、像转送、播消息等。
由于两台计算机之间采用的是客户机/服务器模式,为保证数据的可靠性,可以采用了基于流方式的套接字编程[7]。
1.5 需求分析及可行性研究
1.5.1 时间要求
本项目作为本科毕业设计题目,
从3月8号接受选题开始在5月20号之前完成系统设计
编码实现工作在6月01号之前完成毕业设计论文初稿
6月10号之前最终完成论文。
1.5.2 功能要求
(1)用户端之间的信息发送,
本程序需要实现的最基本的功能
(2)在线用户主机名列表的维护。
(3)在C/S模式中,服务器与客户端是相互依赖的。
在客户端启用以后,需要查看服务器端是否在线,
服务器在线才能正常使用客户端如果服务器不在线
则在检测一定次数以后自动退出客户端程序。
在使用过程中,客户端在指定时间内未向服务器端发送信息的,
服务器认为客户端下线;客户端在一定时间内未收到服务器端信息的
认为服务器已经下线则提示用户并建议退出
在用户一定时间后没有退出的则自动关闭客户端程序。
1.5.3 系统基本流程图
图1-3 聊天系统工作流程图
1.5.4 性能要求
首先要求程序要完全可靠,
可以应付种种由于系统问题产生的错误比如初始网络失败
对方突然下线等。
要求提前设想到类似的尽可能多的可能发生的事件,
做出相应的应对措施并向用户提交简单易懂清晰明白的提示信息。
程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,
避免发生程序假死现象。
开发文档要有好的易理解性,如果系统又要交由别人接手开发,
或者自己由于种种原因需要进行二次开发那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。
要求程序对所运行之系统的硬件条件要求尽可能低,
运行时内存占用尽可能小响应速度要尽可能快。
并且不发生内存泄漏之类影响系统运行的错误事件。
并且要求易于维护及扩展。
所以应该采用模块化开发,各个模块之间不要有太多的联系,
以免维护困难。
1.5.5 测试环境规定
在开发完成以后,
自己进行一个全面的测试。
1.5.6 可行性研究
(1)成本可行性分析
因为本软件只做开发学习使用,
所以暂且不考虑经济成本及盈利问题。
(2)技术可行性分析
首先我已经搭建好开发所需要的软硬件平台,
并进行了合理而完善的需求分析做好了充分的前期准备工作
其次因为本程序的平台将基于WINDOWS将要使用网络通信技术
而WINDOWS有完善成熟的网络通信接口以及与VC开发环境的严密契合能力
加之相类似的更大规模的INTERNET通信工具产品也已有例在先
所以这个程序的开发可行性在技术上是完全可行的。
2 聊天系统的设计
2.1 聊天系统的设计
2.1.1 客户机/服务器模式
通信的两个应用程序间相互作用的主要模式是客户机/服务器模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。
客户机/服务器模式的建立基于以下两点:首先。
建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。
其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步[8]。
客户机/服务器模式在操作过程中采取的是主动请求方式:首先服务器方要先启动,并根据请求提供相应服务:
(1) 打开通信通道并告知本地主机,它愿意在某一公认地址上接收客户请求;
(2) 等待客户请求到达该端口;
(3) 接收到服务请求,处理该请求并发送应答信号。
服务完成后,关闭与客户的通信链路,并终止;
(4)返回第二步,等待客户请求;
(5)关闭服务器。
客户方:
(1) 打开一通信通道,并连接到服务器所在主机的特定端口;
(2) 向服务器发服务请求,等待并接收应答;
(3) 请求结束后关闭通信通道并终止。
由此可知:
(1) 客户与服务器进程的作用是非对称的,因此编码不同;
(2) 服务进程一般是先于客户请求而启动的。
只要系统运行,该服务进程一直存在,直到正常终止或被强迫终止。
2.2 系统实现原理
2.2.1 Win32编程原理
所谓的Win32开发,
就是在C语言的层面上直接使用Win32 API开发Windows应用程序或者系统程序。
虽说现在直接用Win32 API开发应用程序的人已经不多了,
但是深入理解Windows系统程序设计原理仍然是成为Windows开发高手的良好途径。
所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。
下面是进行直接的WIN32 SDK方式编程的基本思路或者说是一个框架:
一个WINDOWS程序分为程序代码和UI(User Interface 用户接口)资源两大部份,
两部份最后以RC编译程序整合为一个完整的EXE文件。
所谓UI资源是指功能菜单、对话框、程序图标、光标形状等等东西。
这些UI资源的实际内容(二进制代码)系借助各种工具产生,
并以各种扩展名存在如 .ico .bmp .cur等等。
程序员必须在一个所谓的资源描述档(.rc )中描述它们。
RC编译器( RC.EXE )读取RC 文件的描述后将所有UI资源文件集中制作出一个.RES 文件,
再与程序代码结合在一起这才
上一篇:
基于VC的局域网聊天室任务书和开题报告
下一篇:
近三年来思想工作小结(德能勤绩廉)