《2022年2022年简单的即时通信软件 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年简单的即时通信软件 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河南理工大学计算机科学与技术学院课程设计报告2011 2012 学年第二学期课程名称计算机网络设计题目简单的即时通信软件姓 名学 号专业班级网络安全 10-05 指导教师2012 年 6 月 19 日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 18 页 -目录一、课程设计目的及要求3(一)本课程设计的教学基本要求3(二)简单的即时通信软件目的与要求3 二、设计原理3(一)socket 简介3(二)WinSocket 的通信原理4(三)SOCKET 连接过程4(四)套接字通信5 三、程序设计相关介绍及方法6(一)点对点通信6(二)WinSocket 通信的步骤7(三)程序中用到
2、的过程函数和核心代码7 四、系统的原理框图及程序流程图11 五、设计结果及分析14(一)服务器端和客户端在线初始化窗口14(二)通信测试15(三)使用须知16 六、总结17 七、参考文献17 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 18 页 -一、课程设计目的及要求(一)本课程设计的教学基本要求1.巩固和加深对计算机网络原理的理解,提高综合运用本课程所学知识的能力。2.培养学生选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3.通过实际分析设计、编程调试,掌握计算机网络通信的基本规程,以及协议的利用方法,体会体系结构分层的思路。4.
3、能够按要求编写课程设计报告书,能正确阐述设计和设计结果、正确绘制系统和程序框图。5.通过课程设计,培养学生严谨的科学态度,严肃认真的工作作风,和团队协作精神。(二)简单的即时通信软件目的与要求利用 WinSock 进行点对点通信,工作机制模仿即时通信软件的基本功能,登陆,上线,传递信息等等。分为客户部分和服务器部分两块,客户部分类似一般通信软件例如QQ,服务器部分主要提供客户端用户基本数据配置。二、设计原理(一)socket 简介所谓 socket 通常也称作 套接字,用于描述IP 地址和端口,是一个通信链的句柄。应用程序通常通过套接字 向网络发出请求或者应答网络请求。Socket 接口是 T
4、CP/IP 网络的 API,Socket 接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP 网络上的应用程序。要学Internet 上的 TCP/IP 网络编程,必须理解Socket 接口。Socket 接口设计者最先是将接口放在Unix 操作系统里面的。如果了解Unix 系统的输入和输出的话,就很容易了解Socket 了。网络的Socket 数据传输是一种特殊的I/O,Socket 也是一种文件描述符。Socket 也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都是通过该Socket 实现的。名师资料
5、总结-精品资料欢迎下载-名师精心整理-第 3 页,共 18 页 -常 用 的Socket类 型 有 两 种:流 式Socket(SOCK_STREAM)和 数 据 报 式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP 服务应用;数据报式Socket 是一种无连接的Socket,对应于无连接的UDP 服务应用。最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket 号;服务器拥
6、有全局公认的socket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。socket 利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器 socket 半相关为全局所公认非常重要。不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。(二)WinSocket 的通信原理WinSock 是一个基于Socket 模型的API。WinSock 在 Windows98,Window NT 中使用。WinSock 一般由两部分组成:
7、开发组件和运行组件。开发组件是供程序员在 windows 环境下开发网络应用程序使用的,它包括应用程序接口库函数、头文件和实现的文档,其中最主要的是WINSOCK.H运行组件是以动态链接库(DlL)来实现 socket 接口的。文件名为WINSOCK.DLL应用程序在执行时装入它就能实现网络通信功能(三)SOCKET 连接过程根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目
8、标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 18 页 -器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。(四)套接字通信要通过 Internet 进行通信,至少需要一对套接字,其中一个运行在客户端,称之为 Client
9、Socket,另一个运行于服务器端面,称为ServerSocket。根据连接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。服务器监听是指服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求是由客户端的套接字提出连接请求,要连接的目标是服务器端套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器端套接字提出连接请求。连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端
10、套接字的信息发送给客户端,一旦客户端确认了此连接,连接即可建立。而服务器端继续处于监听状态,继续接收其他客户端的连接请求。使用套接字进行数据处理有两种基本模式:同步和异步。同步模式:同步模式的特点是在通过Socket 进行连接、接收、发送数据时,客户机和服务器在接收到对方响应前会出于阻塞状态,即一直等到收到对方请求进才继续执行下面的语句。可见,同步模式只适用于数据处理不太多的场合。当程序执行的任务很多时,长时间的等待可能会让用户无法忍受。异步模式:异步模式的特点是在通过Socket 进行连接、接收、发送操作时,客户机或服务器不会处于阻塞方式,而是利用callback 机制进行连接、接收、发送处
11、理,这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的程序。可见,异步套接字特别适用于进行大量数据处理的场合。使用同步套接字进行编程比较简单,而异步套接字编程则比较复杂。三、程序设计相关介绍及方法(一)点对点通信名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 18 页 -点对点通信实现网内任意两个用户之间的信息交换。电台收到带有点对点通信标识信息的数据后,比较系统号和地址码,系统号和地址码都与本地相符时,将数据传送到用户终端,否则将数据丢掉,不传送到用户终端。点对点通信时,只有 1 个用户可收到信息。点对点连接是两个系统或进程之间的专用通信链路。想象一下直接连接两个系统
12、的一条线路。两个系统独占此线路进行通信。点对点通信的对立面是广播,在广播通信中,一个系统可以向多个系统传输。电话呼叫是面向电路的两部电话机之间的点对点链路。但是,呼叫通常是通过电话公司中继线多路复用的;因此虽然电路本身可能是虚拟的,但用户在进行点对点通信会话。端到端连接是指通过交换网络的两个系统间的连接。例如,因特网由路由器网状网组成。数据分组沿着逐跳路径从一个路由器到下一个路由器,一直到达目的地。每一跳都包括路由器之间的物理点对点链路。因此,一个路由路径包括多个点对点链路。在ATM 和帧中继环境中,端到端路径称为虚电路,它穿越一组预定义的点对点链路。共享的 LAN,如以太网,提供了一种点对点
13、通信的形式。请记住,在共享的LAN 上,所有的节点都在监听缆路上的信号,因此支持广播。但是,当一个节点向另一节点发送帧时,只有那个节点接收到帧,可以说两个节点通过共享媒体进行点对点通信。通过多点链路的点到多点连接是可能的。多点是指信号由基站到用户端是以点到多点的方式传送的,而信号由用户端到基站则是以点对点的方式传送的。大型机和它的终端就是一个例子。提供多点连接的设备通常是一个智能控制器,它管理来自与它相连的多个设备的信息流。点对点通信在OSI 协议栈的物理和数据链路层和网络层中定义。(二)WinSocket 通信的步骤1.在服务器端的应用程序中的网络通信的步骤如下(1)建立服务器端的Socke
14、t,开始侦听整个网络中的连接请求。(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接,再继续进入监听状态。名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 18 页 -(3)在监听的过程中,如果有用户发出了请求,则服务器会产生一个新的连接 Socket 来处理用户的请求,而原来的Socket 仍然会进行监听操作。(4)当完成通信后,服务器关闭与客户端的Socket 连接。2.在客户端应用程序中的网络通信的步骤如下:(1)建立一个客户端的Socket。(2)从命令行中得到服务器的名字,并进行查询以得到服务器的IP 地址;(3)从命令行中得到
15、服务器所提供的端口号,以便进行下一步的操作;(4)发送连接请求到服务器,并等待服务器的回馈信息。(5)连接成功后,与服务器进行数据的交互。(6)数据处理完毕后,关闭自身的Socket 连接,释放进行连接所分配的资源,客户端的程序运行完毕。服务器方服务器等待用户从主窗口发来的启动接收消息过程如下:首先建立自己的套接口。然后建立连接调用 listen()函数,开始倾听,再通过accept()等待接收连接。Accept()等待请求队列中的请求,一旦有连接请求来到,就可以建立一个与 s有相同属性的套接口。最后关闭套接口。客户方客户等待用户从主窗口发来的发送命令,一旦接收到发送请求,调用函数初始化 so
16、cket,窗口函数在收到UNSOCK 消息后,判断是由哪个事件引起的,第一次必然是由连接事件引起的,这样就会执行相同的程序。(三)程序中用到的过程函数和核心代码1、Socket 过程Socket 过程创建一个套接字并返回一个整型描述符:Descriptor=socket(protofamily type protocol)核心代码:sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);/创建服务器监听套节字。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 18 页 -2、Bind 过程在套接字被创建之后,服务器使用Bind 过程提供一个传
17、输层地址,服务器将通过它等待通信。Bind(socket localaddr addrlen)其中:socket 是一个套接字的描述符localaddr 是将要赋予套接字的本地地址,是sockaddr 结构。Addrlen 是本地地址的长度3、Listen 过程服务器调用Listen 过程将套接字设为被动模式以使它能被用来等待客户的通信。Listen(socket queuesize)其中:socket 是一个套接字的描述符queuesize表示该套接字的请求队列的长度,请求队列的存在允许系统在服务器正在处理上一个请求时保存到达的其它请求。4、Connect 过程客户使用 Connect 过程
18、与指定服务器建立连接。Connect(socket saddress saddresslen)其中:socket 是客户端计算机上用于该连接的套接字的描述符saddress 是服务器地址与协议端口号,是sockaddr 结构saddresslen是 saddress的长度5、Accept 过程服务器调用Accept 过程来接受客户的一个连接请求newsock=accept(socket caddress caddresslen)其中:socket 是服务器已经创建并联编于指定协议端口的套接字的描述符caddress用于存放客户端的地址,是sockaddr 结构caddresslen是一个指向整
19、型的指针,用于存放caddress的长度名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 18 页 -核心代码:sClient=accept(sListen,(struct sockaddr*)&client,&iaddrSize);/建立连接6、Send过程如果套接字已连接,send过程可用来传输数据。Send(socket data length flags)其中:socket 是使用的服务器/客户套接字的描述符data 是待发送数据在内存中的地址length 表示数据的字节数flags 包含了请求特殊选项的位,做系统调试用。核心代码:send(sClient,s_Messag
20、e,strlen(s_Message),0);7、Recv 过程一个应用可以条用recv 从一个连接的套接字接收数据。Recv(socket buffer length flags)其中:socket 是从中接收数据的服务器/客户套接字的描述符buffer 表示内存中用来存放接收数据的地址length 表示缓冲区的大小flags 包含了请求特殊选项的位,做系统调试用。核心代码:ret=recv(sClient,c_Message,MSGSIZE,0);/接收数据8、Close 过程Close 过程告诉系统终止对一个套接字的使用。Close(socket)其中:socket 是要关闭的套接字的描
21、述符在 Winsock 中,用 closesocket(socket)来关闭套接字。其他核心代码:Server 端:WSAStartup(0 x0202,&wsaData);/Initialize Windows socket library sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);/创建服务器监听套节字。TCP 协议名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 18 页 -local.sin_family=AF_INET;/AF_INET指明使用 TCP/IP 协议族local.sin_port=htons(PORT);
22、/指明连接服务器的端口号local.sin_addr.s_addr=htonl(INADDR_ANY);/自动获取本机地址bind(sListen,(struct sockaddr*)&local,sizeof(SOCKADDR_IN);/地址绑定到套接字listen(sListen,1);/开始监听sClient=accept(sListen,(struct sockaddr*)&client,&iaddrSize);/建立连接printf(Accepte client:%s:%dn,inet_ntoa(client.sin_addr),ntohs(client.sin_port);HAND
23、LE hThread=CreateThread(NULL,0,FunThread,0,0,0);/创建接收线程CloseHandle(hThread);Client 端:WSAStartup(0 x0202,&wsaData);sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);memset(&server,0,sizeof(SOCKADDR_IN);/先将保存地址的 server 置为全 0 server.sin_family=PF_INET;/声明地址格式是 TCP/IP 地址格式server.sin_port=htons(PORT);/指明连接
24、服务器的端口号server.sin_addr.s_addr=inet_addr(SERVER_ADDRESS);/指明连接服务器的IP 地址connect(sClient,(struct sockaddr*)&server,sizeof(SOCKADDR_IN);/连到刚才指明的服务器上HANDLE hThread=CreateThread(NULL,0,FunThread,0,0,0);CloseHandle(hThread);名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 18 页 -四、系统的原理框图及程序流程图服务响应建立连接服务请求Receive()Socket()C
25、onnect()Send()等待客户端连接处理服务器请求Receive()Send()Socket()Bind()服务器Listen()Accept()图 4.1 系统的原理框图客户名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 18 页 -图 4.2 上图为服务器端程序流程图名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 18 页 -图 4.3 客户端程序流程图名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 18 页 -五、设计结果及分析(一)服务器端和客户端在线初始化窗口图 5.1 客户端初始化界面图 5.2 服务器端初始化界面名师资料总结-
26、精品资料欢迎下载-名师精心整理-第 14 页,共 18 页 -(二)通信测试图 5.3 先登录客户端界面,无法正常使用图 5.4 测试通信正常(客户端)名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 18 页 -图 5.5 测试通信正常(客户端)(以上测试为本地测试,ip 地址为本地,如果需要可进行修改)(三)使用须知1.本软件使用C 语言编写;利用WinSock 进行点对点通信,工作机制模仿即时通信软件的基本功能,分为客户部分和服务器部分两块;2.本软件为简易的点对点通信软件,只支持设定好的用户双方进行通信;3.使用时必须先运行服务器端程序,客服端方能运行。只有双方都在运行时
27、才能进行通信。4.初次使用必须先进行IP 设置,如通信双方有所变化,必须重新设定IP 后才能进行使用;5.由于是使用Socket 进行通信,Socket 只是一种通信手段它本身没有任何额外的安全措施,所以通信数据非常容易被攻击者获取到。再次请使用者在使用本软件通信时不要涉及隐私等其他个人信息。6.由于编者能力有限,程序表现出许多不足之处,若果您有任何建议和意见,名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 18 页 -请联系编者(Email:),本人定虚心求教,谢谢。六、总结通过此次的实验,让我对winSocket 类的使用有了更深入的了解,并且体会到计算机网路理论与实际的联
28、系,在关于网络编程的方面也有了新的认识。在调试程序的时候曾遇到很多困难,在老师同学的帮助下,我最终完成了实验。这次实验课程增强了我的实践能力,我想对以后的学习和工作有很大帮助。Socket 通信时有我们常使用TCP,UDP 协议等等方式进行通信,TCP 是面向连接,安全的协议,例如,我们进行下载等等,就得使用TCP 协议,UDP 面向无连接,不安全的协议,但传输数据要比UDP 快,用于视频聊天等等,Socket 通信时使用到的协议还有很多。另外使用Socket 进行通信要注意:Socket 只是一种通信手段它本身没有任何额外的安全措施,所以要用到加密技术,不然通信的数据非常容易初攻击者获取到七、参考文献百度百科socket:http:/ 百度百科 TCP/IP 协议:http:/ 百度百科点对点通信:http:/ TCP/IP 协议及网络编程技术Windows 网络编程winsock 网络程序设计C 语言高级程序设计名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 18 页 -名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 18 页 -