基于TCP的C/S聊天系统设计

来源 :企业导报·上半月 | 被引量 : 0次 | 上传用户:szr520
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  一、实现目标
  本聊天系统的设计采用了Client/Server模型,服务器端的一个服务地址用来监听对服务的请求,当客户端向该地址提出连接请求时,服务器端会对它的请求做出相应的反应。在本设计中,主要是实现服务器端跟客户端的简单字符交换,当实现连接后,客户端就能向服务器端发送和接收字符。
  二、系统设计
  1.模型及分析。本系统设计是基于TCP的。TCP是面向连接的可靠的传输协议,利用TCP协议进行通信,首先要经过三步握手,以建立通信双方的连接。一旦连接建立好,就可以进行通信。TCP提供了数据的确认和数据的重传机制,保证了发送的数据一定能够到达通信的对方。
  2.C/S模型流程。在C/S模型的网络中,服务器是网络的核心,客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,服务器为客户机提供网络所必须的资源。
  3.系统设计及分析。在TCP/IP的网络应用中,通信的两个进程相互作用的主要模式是C/S模式,在Internet上的聊天系统是服务器提供服务端的连接响应,使用者通过客户端程序登录到服务器后,即可与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。程序要在TCP/IP环境下实现服务器端和客户端的两部分程序。在VC中进行WINSOCK的API编程开发的时候,需要在项目中使用下面的三个文件,否则会出现编译错误:(1)WINSOCK.H:这是WINSOCK API的头文件,需要包含在项目中。(2)WSOCK32.LIB:WINSOCK API连接库文件。在使用中,一定要把它作为项目的非缺省的连接库包含到项目文件中去。(3)WINSOCK.DLL:WINSOCK的动态连接库,位于WINDOWS的安装目录下。
  (1)服务器端socket的操作。第一,初始化阶段调用WSAStartup()。首先定义一个WORD类型的变量,wVersionRequested,用来保存Winsock库的版本号,接着调用MAKEWORD宏创建一个包含了请求版本号的WORD值,之后调用WSAStartup函数加载套接字库。接下来判断wsaData.wVersion的低字节和高字节是否都等于1,如果不是我们所请求的版本,调用WSACleanup函数,终止对Winsock库的使用并返回。第二,创建套接字(Socket)。初始化WinSock的动态连接库后,需要在服务器端定义一个SOCKET类型的变量,用来接收socket函数返回的套接字。对socket函数来说,第一个参数只能是AF_INET;基于TCP协议的网络程序,需要创建的是流式套接字,将socket函数的第二个参数设置为SOCK_STREAM;将其第三个参数指定为0,该函数可根据地址格式和套接字类别自动选择一个合适的协议。第三,将套接字绑定到一个本地的地址和端口(bind)。为服务器端定义的该监听的Socket指定一个本地的地址及端口,这样客户端才知道要连接哪一个地址的哪个端口,为此要调用bind()函数。在绑定之前,定义一个SOCKET_IN类型的变量,然后对该地址结构变量的成员进行赋值。第四,将套接字设为监听模式(listen),准备接收客户请求。当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。Listen()函数使服务器端的Socket 进入监听状态,第一个参数是将要设置的套接字,第二个参数是可以建立的最大连接数(目前最大值限制为 5,最小值为1)。第五,等待客户请求到来,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。调用accept函数等待并接受客户的连接请求。此时,也需要定义一个地址结构体SOCKETADDR_IN的变量,用来接收客户端的地址信息。作为服务器端,它需要不断的等到客户端的连接请求,所以程序进入一个死循环,让服务器端程序能够不断运行。第六,与客户端进行通信(send/recv)。可以利用recv函数接收客户端发送的数据,调用send函数向客户端发送数据。第七,关闭套接字。服务器或客户机的任一端启动,调用closesocket()就可关闭通信连接,而要关闭Server端监听状态的socket,同样也是利用此函数。另外,与程序启动时调用WSAStartup()相对应,程式结束前,需要调用WSACleanup()来通知Winsock Dll释放Socket所占用的资源。
  (2)客户端Socket的操作。第一,创建客户端的Socket。客户端应用程序首先调用WSAStartup()函数来与Winsock的动态连接库建立关系,然后调用socket()来建立一个TCP socket。socket函数第一个参数只能是AF_INET,socket函数的第二个参数设置位SOCK_STREAM,其第三个参数指定为0。第二,向服务器提出连接申请。对客户端来说,它不需要绑定,可以直接连接服务器端。调用connect()函数来提出与服务器端建立连接的申请,首先定义一个地址结构体变量,并对其成员进行赋值,设定服务器端的IP地址和端口。本程序中服务器端和客户端都是本地的,所以可以使用一个特殊的IP地址:127.0.0.1,这是本地的回路地址。第三,和服务器端进行通信。当建立连接后,就可以调用send函数向服务器端发送数据了,之后调用recv 函数接收服务器发送的数据。第四,关闭套接字。当完成通信后,调用closesocket函数关闭套接字,释放为此套接字分配的资源。最后调用WSACleanup函数,终止对套接字库的使用。
  参考文献
  [1]孙鑫,余安萍.VC++深入祥解[M].北京:电子工业出版社,2006:223
  [2]谢希仁.计算机网络[M].大连:大连理工大学出版社,2004:79~80
其他文献
在教育全面改革的背景下,情感教育是整个教育过程中的重要组成部分,它主要是以心理学和教育学为基础的,对学生的身心健康发展有积极的促进作用,所以教师在初中化学的教学中应该更加重视情感教学,实现素质教育的全面创新;情感教学与学生的兴趣和态度紧密相关,只有对学生开展了情感教学,他们的学习兴趣才能得到更好的激发;教师在初中化学的教学过程中,为了开展情感教学,教师必须积极围绕化学教学目标,以教学目标为中心,分
期刊
摘要:近几年随着我国政治、经济、文化的发展进步,相关部门对于人力资源的要求和重视程度也在不断提高,医院人力资源的各项相关的管理工作也在深入开展中。传统的人力资源管理方法已经不是唯一的可行途径,统计调查与分析开始发挥着自身重要的作用,成为人力资源管理的重要措施。本文通过分析统计对人力资源管理工作中的应用进行探讨,说明统计分析的方法在医院人力资源管理方面的重要性,并以此提出相应的策略,予以借鉴。  关
在彼得?杰克逊的电影《魔戒》里面,有我最喜爱的两处故事发生地,一个是霍比屯,一个是瑞文戴尔.在梦里我曾经去到过这样的地方——起伏的山脉、延绵的丘陵、深邃的峡谷、高大
期刊
一直以来,美术都是一门特色性的学科,其本身具有很强的艺术性,随着现代学校对于美术教育的逐渐重视,美术的教学体系也在不断完善.然而,就我国目前小学美术教育而言,其中还存
今年3月12日,是著名乡土文学作家刘绍棠逝世的10周年,这的确是个不寻常的、值得纪念的日子。我与他的接触和交往虽然很晚,时间也不算太长;但不知为什么,却一见如故、相见恨晚
本文通过对荣华二采区10
期刊
前言:近几十年来,随着我国全面开放的不断深入,世界经济一体化进程的加速,不同民族之间的文化碰撞越来越激烈,在青少年身上表现尤为突出。一方面,世俗化、功利化的观念越来越受到一些年轻学生的追捧,以自我为中心的自私自利取向越来越明显;社会层面上,西方文化貌似越来越成为中华大地上的主流文化,蚕食着深受传统文化影响一代代中国人的信仰、人生观、价值观和世界观;另一方面,这些年应试的教育理念在中小学教育中霸道横
期刊
随着现代市场经济的快速发展,医院内部现行的会计理念已满足不了当前医院的要求,会计制度改革成为必然。笔者根据自身工作经验,首先论述了医院会计制度改革与医院会计新理念
随着初中教学模式的不断发展改革,出现了很多新型的教学模式,为初中数学教学提供了很多的帮助.导学案则是其中效果比较好的一种教学模式,通过导学案教学法的合理应用,可以有
摘 要:本文通过对我国空域主权分析,军用空域现状,民用空域现状对我国空域管理权进行较为详尽的阐述与分析,对空域资源的管理进行深入的思考、研究与分析。最后,对政府在我国空域改革中提出建议,为合理利用我国空域资源,优化空域资源配置,建立健全空域督查管理体制,建立空域灵活利用机制,有利于提高空中交通流量,减少航班延误,有效解决航班延误的社会问题,促进社会和谐稳定,进行了理性的探讨和创新。  关键词:政府