机进行通信的通信协议。
TCP/IP是一个两层的程序。
高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。
这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。
低层是网际协议,它处理每个包的地址部分,
使这些包正确的到达目的地。
网络上的网关计算机根据信息的地址来进行路由选择。
即使来自同一文件的分包路由也有可能不同,
但最后会在目的地汇合。
TCP/IP使用客户端/服务器模式进行通信。
两个系统间的多重连接是这样确认并协调一致的:
原IP地址、目的IP地址、源端口、目的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。
服务进程通常使用一个固定的端口。
这些端口号是"广为人知的",因为在建立与特定主机或服务的连接时,
需要这些地址和目的地址进行通讯。
在此TCP/IP协议将起着实现聊天室的重要组成之一。
第二章 系统需求分析
2.1 设计与功能
综合运用大三期间学习的C++知识及计算机网络相关知识,
另外加上对利用工具的资料的查阅设计并实现一个网络应用程序
以Visual C++为作为开发平台通过实践复习巩固所学知识以及学习接受新的知识的过程
完成自己的毕业设计。
采用客户/服务器模式,分为客户端程序和服务器端程序。
服务器采用WINSOCK I/O模型中的任一种,
支持多个客户同时在线聊天
但是在本文中因为技术问题对于多人聊天尚不能做测试
主要将实现双人聊天。
客户端程序和服务器程序通过网络交换聊天字符串内容,
服务器窗口的列表框中显示当前在线用户支持客户端之间的私聊(可以通过服务器中转
或考虑UDP打洞直接建立端端连接)。
课程设计要求设计并编程完成两个方面的内容:
首先建立一个使用TCP协议的聊天室服务器,
这个服务器可以同时支持多个用户的在线聊天;其次设计一个可以和服务器通信的聊天室客户端。
关于大体相关必要实现的功能要求如下:
1. 支持多个客户端的连接,
在服务器和客户端之间进行数据传输;
2. 接受客户端发送的消息
并显示在一个列表框里;
3. 在用户连接上的时候有提示
显示出连接用户的名字;
4. 发送信息时可以显示聊天记录;
5. 聊天信息要显示在聊天记录中
包括发送信息和接受信息;
6. 聊天室本身要尽量稳定。
2.2 系统简要介绍
聊天交流是目前互联网提供的主要内容。
聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,
这种聊天系统需要登陆统一的聊天服务器。
在基于Socket的聊天系统中,
主要有两种角色:
服务器和客户端,
不同的客户端登陆集中式的服务器通过服务器将一个客户端发出的信息推送到其他所有客户端。
基于Socket的聊天系统最早实现是使用网页刷新方式,
通过客户端不断地自动刷新将服务器端整个页面内容下载到客户端显示
这种方式的聊天速度慢而且有刷屏现象很快被更新的聊天技术所替代。
聊天系统在客户端和服务器之间主要传送的是文字信息,
服务器端只需要把最近的文字信息推送到客户端
这样减少了网络传输内容节省了网络传输的时间
无疑提高了聊天速度。
这种"推"技术是目前基于Socket聊天系统的主要实现技术。
在Internet上的聊天室程序一般都是以服务器提供服务端连接响应,
使用者通过客户端程序登录到服务器就可以与登录在同一服务器上的用户交谈
这是一个面向连接的通信过程。
因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
VC++对网络编程的支持有socket支持,WinInet支持,
MAPI和ISAPI支持等。
其中,Windows Sockets API是TCP/IP网络环境里,
也是Internet上进行开发最为通用的API。
最早美国加州Berkeley分校在UNIX下为TCP/IP协议开发了一个API,
这个API就是著名的Berkeley Socket接口(套接字)。
在桌面操作系统进入Windows时代后,仍然继承了Socket方法。
在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,
它也相当于一种文件描述符具有一个类似于打开文件的函数调用-socket()。
可以这样理解:
Socket实际上是一个通信端点,
通过它用户的Socket程序可以通过网络和其他的Socket应用程序通信。
Socket存在于一个"通信域"(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,
并且与另一个域的Socket交换数据。
Socket有三类。
第一种是SOCK_STREAM(流式),提供面向连接的可靠的通信服务,
比如telnet,http。
第二种是SOCK_DGRAM(数据报),提供无连接不可靠的通信,
比如UDP。
第三种是SOCK_RAW(原始),主要用于协议的开发和测试,
支持通信底层操作比如对IP和ICMP的直接访问。
Windows Socket机制分析有以下几点,关于基本Socket的调用,
Windows Socket的启动和终止关于其异步终止选择机制
异步数据传输机制。
一些基本的Socket系统调用
主要的系统调用包括:
socket()-创建Socket;bind()-将创建的Socket与本地端口绑定;connect()与accept()-建立Socket连接;listen()-服务器监听是否有连接请求;send()-数据的可控缓冲发送;recv()-可控缓冲接收;closesocket()-关闭Socket。
Windows Socket的启动与终止
启动函数WSAStartup()建立与Windows Sockets DLL的连接,
终止函数WSAClearup()终止使用该DLL这两个函数必须成对使用。
异步选择机制
Windows是一个非抢占式的操作系统,
而不采取UNIX的阻塞机制。
当一个通信事件产生时,操作系统要根据设置选择是否对该事件加以处理,
WSAAsyncSelect()函数就是用来选择系统所要处理的相应事件。
当Socket收到设定的网络事件中的一个时,
会给程序窗口一个消息
这个消息里会指定产生网络事件的Socket发生的事件类型和错误码。
异步数据传输机
WSAAsyncSelect()设定了Socket上的须响应通信事件后,
每发生一个这样的事件就会产生一个WM_SOCKET消息传给窗口。
而在窗口的回调函数中就应该添加相应的数据传输处理代码。
相关流程图如下所示:
分别表示客户端和服务器端
在经济方面,
要说明的是实现这个程序只是为了自己学习的探索与设计
所以不考虑经济成本以及其他关于经济的方面。
2.3 系统功能
1. 服务器必须要实现的三件任务:
(1) 服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,
并且需要维护一个客户连接表以记录所有成功的连接。
(2) 服务器聊天程序要及时接受从各个聊天客户发送过来的信息,
然后把这些信息转发到一个或多个客户连接。
对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。
(3) 服务器还要监控这些连接的状态,
在客户主动离开或发生故障时从列表中删除相应的表项
并及时更新连接表。
这些要求可以通过CSocket类提供的功能实现。
从CSocket派生出两个类CListenSocket和CClientSocket,它们分别用来侦听客户的连接请求和建立与客户的连接。
服务器只需要一个侦听套接字CListenSocket,
然后根据客户的连接请求动态创建客户套接字CClientSocket。
客户套接字的数量是不可预知的,因此需要一个列表来记录。
MFC的CPtrList类就能实现这种功能。
2.客户端聊天程序需要完成以下几个功能:
(1) 客户端聊天程序要负责建立和维护与服务器的连接,
通过获取用户的设置尝试与服务器的连接并且随时检测连接的状态。
(2) 客户端聊天程序要把用户输入的信息及时发送到聊天服务器。
一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,
才能及时地满足用户的交互需求。
(3) 要随时准备好接受来自服务器的信息,
随时把接受到的信息显示出来让用户及时看到对方的响应。
(4) 在用户退出聊天过程是要关闭与服务器的连
上一篇:
基于VC的聊天系统毕业论文
下一篇:
近三年来思想工作小结(德能勤绩廉)