当前位置:
文档之家› 基于Socket的即时通讯系统
基于Socket的即时通讯系统
应用进程 WSAAsyncSelect 线程继续运行
Recv() 复制数据期间
阻塞
处理数据
系统调用
返回 消息 系统调用
返回成功指示
内核
等待数据 数据准备好 复制数据 将数据复制到 拥护空间
完成复制
WSAAsyncSelect 模型 4、TCP/IP 协议、TCP 协议
网际协议 IP 是 TCP/IP 的心脏,也是网络层中最重要的协议。 IP 层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包, 并把该数据包发送到更高层---TCP 或 UDP 层;相反,IP 层也把从 TCP 或 UDP 层 接收来的数据包传送到更低层。IP 数据包是不可靠的,因为 IP 并没有做任何事 情来确认数据包是按顺序发送的或者没有被破坏。IP 数据包中含有发送它的主 机的地址(源地址)和接收它的主机的地址(目的地址)。 如果 IP 数据包中有已经封好的 TCP 数据包,那么 IP 将把它们向‘上’传送 到 TCP 层。TCP 将包排序并进行错误检查,同时实现虚电路间的连接。TCP 数据 包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被 重传。 UDP 与 TCP 位于同一层,但对于数据包的顺序错误或重发。因此,UDP 不被 应用于那些使用虚电路的面向连接的服务,UDP 主要用于那些面向查询---应答 的服务. TCP 和 UDP 服务通常有一个客户/服务器的关系。两个系统间的多重连接是 这样相互确认并协调一致的,TCP 或 UDP 连接唯一地使用每个信息中的如下四项 进行确认: 源 IP 地址 发送包的 IP 地址。
我们选择的硬件环境和软件环境如下:
1、 硬件环境
•处理器:Intel Pentium PIII 或更高处理器
•内存ห้องสมุดไป่ตู้256MB 或更高
•网络:局域网
开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。
2、 软件环境
•操作系统:Windows 2000 /Windows XP / Windows 2003
结构。 C/S 结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出 设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数 据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算 量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目 不多的局域网内使用。 C/S 结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处 理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个: 只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及, 这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系 统进行专门的设计来处理分布式的数据。 五、软件设计 (一)系统分析 1、系统需求 聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似 ICQ 属于一种点对点的聊天系统;还有一种是基于 Socket 的集中式聊天系统,这种 聊天系统需要登陆统一的聊天服务器。在基于 Socket 的聊天系统中,主要有两 种角色:服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一 个客户端发出的信息推送到其他所有客户端。 基于 Socket 的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动 刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且 有刷屏现象,很快被更新的聊天技术所替代。 聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近 的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间, 无疑提高了聊天速度。这种“推”技术是目前基于 Socket 聊天系统的主要实现 技术。 在基于 Socket 的聊天系统,客户端和服务器必须保持随时随地的连接。这有别 于普通 Web 浏览的连接方式。在使用浏览器访问服务器时,先由客户端发出 HTTP 协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求 (Request)和响应(Response)是一种一对一的前后因果关系。而在基于 Socket 的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的 其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独 立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和 服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。 局域网聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统 交互。首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据 库连接并测试成功后,开启服务器。接下来,在客户端,该系统的用户能够通过 登陆界面进入,然后直接与系统交互,进行文字传送。本系统支持的活动列表如 下: (1) 配置服务器,设置 IP 及端; (2) 开启服务器; (3) 用户登陆系统; (4) 用户与系统交互,进行文字传送; (5) 用户好友登陆后,自动刷新列表;
目的 IP 地址 接收包的 IP 地址。 源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。 端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端 口对应一个 16 比特的数。服务进程通常使用一个固定的端口,例如,SMTP 使用 25。这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时, 需要这些地址和目的地址进行通讯,图如下所示:
四、设计原理
(一)开发环境
我所设计的是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短
时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求
如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;
开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,
一、设计目的 通过综合课程设计,使学生能够运用《数字信号处理》、《信号与系统》、《通信原 理》、《面向对象的程序设计》、《计算机通信网》、《通信协议开发及应用》等课程 的知识来设计一个基于 Socket 的即时通讯系统,培养学生的动手能力以及分析 问题、解决问题的能力。 二、设计内容 设计一个基于 Socket 的即时通讯系统。 三、设计要求 (一)基本要求 1. 熟练掌握面向对象的程序设计方法; 2. 实现点对点通讯,能进行文字对话传输,包括客户端与服务器端; 3. 能对系统参数进行配置。 (二)提高要求 1、实现文件、图片传输; 2、语音对话(两人及两人以上); 3、友好的对话界面。
又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间 的关系如下图所示:
Windows Sockets 实现通讯工作的各层关系图 3、WSAAsyncSelect 模型开发 WSAAsyncSelect()调用允许应用程序程序注册一个或多个感兴趣的网络事件。这 一 API 调用用来取代探寻网络 I/O 调用。在 select()或非阻塞 I/O 例程(例如 send()和 recv())已经被调用或将要被调用的情况下都可以使用 WSAAsyncSelect()调用。在这种情况下,在声明感兴趣的网络事件时,你必须提 供一个通知时使用的窗口句柄。那么在你声明的感兴趣的网络事件发生时,对应 的窗口将收到一个基于消息的通知。其过程如下图所示:
面向连接的(TCP)连接过程 5、Client/Server 结构(客户机/服务器模式)
Client/Server 结构(C/S 结构)是大家熟知的客户机和服务器结构。通过它可以 充分利用两端硬件环境的优势,将任务合理分配到 Client 端和 Server 端来实现, 降低了系统的通讯开销。目前大多数应用软件系统都是 Client/Server 形式的两层
始,到现在面向对象技术发展成为一种比较成熟的编程思想,通过面向对象技术,
可以将现实世界直接影射到对象空间,从而为系统的设计和开发带来革命性的影 响。Visual C++是一个典型的面向对象程序的设计语言,它也是目前为止功能最 强、最受欢迎、应用最广泛、高效的 Windows 应用程序开发工具,它是在 C 语 言基础之上发展起来的,是 C 语言的超集。 Visual C++是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法, 更重要的是它能支持面向对象、可视化的开发风格。因此 Visual C++又称作是 一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。 Visual C++ 具 有的优点 : 提供了面向 对象的 应用程序 框架 MFC (Microsoft Foundation Class),简化了程序员的编程工作,提高了模块的可重用性;提供 了基于 CASE 技术的可视化软件的自动生成和维护工具 AppWizard、ClassWizard、 Visual Studio、WizardBar 等,实现了直观、可视的程序设计风格,方便地编 和管理各种类,维护程序的源代码;封装了 Windows 的 API 函数、USER、KERNEL、 GDI 函数,简化了编程时创建、维护窗口的许多复杂的工作。 2、M F C MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在 C++环境下编写应用程序的一个框架和引擎,VC++是 WinDOS 下开发人员使用的专 业 C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC 就 是挂在它之上的一个辅助软件开发包,MFC 作为与 VC++血肉相连的部分(注意 C++ 和 VC++的区别:C++是一种程序设计语言,是一种大家都承认的 软件编制的通用 规 范 , 而 VC++ 只 是 一 个 编 译 器 , 或 者 说 是 一 种 编 译 器 + 源 程 序 编 辑 器 的 IDE,WS,PlatForm,这跟 Pascal 和 Delphi 的关系一个道理,Pascal 是 Delphi 的 语言基础,Delphi 使用 Pascal 规范来进行 Win 下应用程序的开发和编译,却不同 于 Basic 语言和 VB 的 关系,Basic 语言在 VB 开发出来被应用的年代已经成了 Basic 语言的新规范,VB 新加的 Basic 语言要素,如面向对象程序设计的要素,是 一种性质上的飞跃,使 VB 既是一个 IDE,又成长成一个新的程序设计语言),MFC 同 BC++集成的 VCL 一样是一个非外挂式的软件包,类库,只不过 MFC 类是微 软为 VC++专配的.. 3、 WINDOWS SOCKETS 网络编程接口 选定 WINDOWS 平台开发网络通信程序,可以选择 WINDOWS 的 SOCKETS 编程接口, Windows Sockets 是一套开放的、支持多种协议的 Windows 下的网络编程接口。 现在的 Winsock 已经基本上实现了与协议无关,你可以使用 Winsock 来调用多种 协议的功能,但较常使用的是 TCP/IP 协议。Windows sockets 无疑是我们进行 网络编程的利器。所有的 Windows Sockets 实现都支持流套接口和数据报套接口。 应用程序调用 Windows Sockets 的 API 实现相互之间的通讯。Windows Sockets