好文档 - 专业文书写作范文服务资料分享网站

基于socket的聊天程序设计与实现

天下 分享 时间: 加入收藏 我要投稿 点赞

李战胜 《基于socket的聊天程序设计与实现》 第1页 共12页

基于socket的聊天程序设计与实现

学生姓名:XXXXXXXX 指导老师:XXXXXXXXXXXX

摘 要 本设计在WINDOWS平台上,以C语言为编程语言,实现局域网内的即时通信工功能即聊天的功能。本设计是基于Windows Socket的编程,分别在同一局域网内的两台PC机的VC++ 6.0平台上运行服务端和客户端程序。服务器与客户端在Windows7 环境下采用了TCP/IP连接方式,由客户端登录到服务端PC机,实现客户端与服务端PC的信息传输。

关键词 socket; C语言 ;TCP/IP;程序设计;VC++6.0

1 引 言

近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,在局域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。这些在企业内部原有局域网设计之初未曾考虑到的新情况的出现使得局域网不堪重负,容易发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为企业发展的瓶颈。

为了解决上述矛盾,人们提出了许多方法。提升网络带宽及增加服务器的吞吐能力是解决此矛盾的一种方法。然而,从企业运行的成本方面考虑,无论是单纯地提升网络带宽或增加服务器的吞吐能力都不能从根本上解决局域网资源紧张的问题,对旧有局域网的大规模硬件改造反而会增加企业的负担。

李战胜 《基于socket的聊天程序设计与实现》 第2页 共12页

基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。

基于Socket的局域网聊天工具是此类局域网通信软件的具体实例之一,它很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。

基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。

1.1 课程设计目的

了解基于socket的程序设计方法,增强程序编写能力,加深对计算机网络通信的理解。另外,通过课程设计培养学生严谨的科学态度,认真的工作作风、团队协作精神、自主设计和独力思考的能力。使同学们学会文献检索的基本方法和综合运用文献的能力。

1.2 设计平台

网络:局域网。

操作系统:Windows 7。 VC++6.0简介:

VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需

李战胜 《基于socket的聊天程序设计与实现》 第3页 共12页

的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。

2 设计原理

程序采用Windows Socket编程,利用MFC类库中,对Windows Socket API进行了封装的CAsyncSocket类及其子类CSocket中提供的成员函数,完成网络的连接以及对字符消息的传送。

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 文件,再与程序代码结合在一起,这才是一个完整的 Windows可执行文件。

与控制台程序相同的是,一个WIN32程序也必须有一个程序入口点,但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序,就会调用加载器把程序进行加载,然后调用C startup code,后者再调用WinMain(),程序的执行就开始了,WinMain()函数的原型为:int

李战胜 《基于socket的聊天程序设计与实现》 第4页 共12页

CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);

2.2 TCP/IP协议简介

TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP主要包括以下协议:

IP:网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。

ICMP:网间报文控制协议(Internet Control Message Protocol)此协议处理网关和主机的差错和传送控制。

TCP: 传输控制协议(Transmission Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物

2.3 WINDOWS SOCKETS网络编程接口概述

在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户向这个服务的地址提出了连接请求。在这个时刻,服务程序被\惊醒\并且为客户提供服务-对客户的请求作出适当的反应。

为了方便这种Client/Server模型的网络编程,90年代初,由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。

Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具

李战胜 《基于socket的聊天程序设计与实现》 第5页 共12页

有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。

微软为Visual C++定义了Winsock类如CAsyncSocket类和派生于CAsyncSocket 的CSocket类,它们简单易用,我们当然可以使用这些类来实现自己的网络程序,但是为了更好的了解Winsock API编程技术,本设计中将使用底层的API函数实现 Winsock 平台的即时通信工具。

在VC中进行WINSOCK的API编程开发的时候,需要在项目中使用下面的三个文件,否则会出现编译错误。

(1) WINSOCK.H: 这是WINSOCK API的头文件,需要包含在项目中。 (2) WSOCK32.LIB: WINSOCK API连接库文件。

(3) WINSOCK.DLL: WINSOCK的动态连接库,位于WINDOWS的安装目录下。

3 详细设计与实现

3.1客户端

连接模块设计:客户端计算机获取本机开放的socket端口23,再发送目标主机的IP,通过connection()函数与服务端建立连接,如果connection()作用结果出现错误的socket,则连接失败,否则通过recv()函数接收服务器发送的字符串,即为服务器发送的欢迎信息。模块程序如下: ……

int connection() {

WSAreturn = WSAStartup(0x101,&WSAData); //始化一个WSADATA结构 if(WSAreturn) {

printf(\发生一个未知错误!\\n\return 0; }

基于socket的聊天程序设计与实现

李战胜《基于socket的聊天程序设计与实现》第1页共12页基于socket的聊天程序设计与实现学生姓名:XXXXXXXX指导老师:XXXXXXXXXXXX摘要本设计在WINDOWS平台上,以C语言为编程语言,实现局域网内的即时通信
推荐度:
点击下载文档文档为doc格式
59r4x4if406i8ss1c8w102tjb2ixwe014n3
领取福利

微信扫码领取福利

微信扫码分享