最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

简单的即时通信软件

日期:2020-03-30  类别:最新范文  编辑:学科吧  【下载本文Word版

简单的即时通信软件 本文关键词:即时通信,简单,软件

简单的即时通信软件 本文简介:河南理工大学计算机科学与技术学院课程设计报告2011—2012学年第二学期课程名称计算机网络设计题目简单的即时通信软件姓名学号专业班级网络安全10-05指导教师2012年6月19日目录一、课程设计目的及要求…………………………………………3(一)本课程设计的教学基本要求…………………………………3(

简单的即时通信软件 本文内容:

河南理工大学

计算机科学与技术学院

课程设计报告

2011—

2012

学年第二学期

课程名称

计算机网络

设计题目

简单的即时通信软件

专业班级

网络安全10-05

指导教师

2012

6

19

目录

一、课程设计目的及要求…………………………………………3

(一)本课程设计的教学基本要求…………………………………3

(二)简单的即时通信软件目的与要求……………………………3

二、设计原理………………………………………………………3

(一)socket简介…………………………………………………3

(二)WinSocket的通信原理………………………………………4

(三)SOCKET连接过程……………………………………………4

(四)套接字通信…………………………………………………5

三、程序设计相关介绍及方法……………………………………6

(一)点对点通信…………………………………………………6

(二)WinSocket通信的步骤………………………………………7

(三)程序中用到的过程函数和核心代码…………………………7

四、系统的原理框图及程序流程图………………………………11

五、设计结果及分析………………………………………………14

(一)服务器端和客户端在线初始化窗口…………………………14

(二)通信测试……………………………………………………15

(三)使用须知……………………………………………………16

六、总结……………………………………………………………17

七、参考文献………………………………………………………17

一、课程设计目的及要求

(一)本课程设计的教学基本要求

1.巩固和加深对计算机网络原理的理解,提高综合运用本课程所学知识的能

力。

2.培养学生选用参考书,查阅手册及文献资料的能力。培养独立思考,深入

研究,分析问题、解决问题的能力。

3.通过实际分析设计、编程调试,掌握计算机网络通信的基本规程,以及协

议的利用方法,体会体系结构分层的思路。

4.能够按要求编写课程设计报告书,能正确阐述设计和设计结果、正确绘制

系统和程序框图。

5.通过课程设计,培养学生严谨的科学态度,严肃认真的工作作风,和团队

协作精神。

(二)简单的即时通信软件目的与要求

利用WinSock进行点对点通信,工作机制模仿即时通信软件的基本功能,登

陆,上线,传递信息等等。分为客户部分和服务器部分两块,客户部分类似一般

通信软件例如QQ,服务器部分主要提供客户端用户基本数据配置。

二、设计原理

(一)socket简介

所谓socket通常也称作“套接字“,用于描述IP地址和端口,是一个通信链

的句柄。应用程序通常通过“套接字“向网络发出请求或者应答网络请求。

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程

序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP

网络编程,必须理解Socket接口。

Socket接口设计者最先是将接口放在Unix

操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket

了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。

Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型

的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应

用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

最重要的是,socket

是面向客户/服务器模型而设计的,针对客户和服务器

程序提供不同的socket

系统调用。客户随机申请一个socket

(相当于一个想打

电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;

服务器拥有全局公认的

socket

,任何客户都可以向它发出连接请求和信息请求

(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。

socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。

服务器socket

半相关为全局所公认非常重要。不妨考虑一下,两个完全随机的

用户进程之间如何建立通信?假如通信双方没有任何一方的socket

固定,就好

比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。

(二)WinSocket的通信原理

WinSock是一个基于Socket模型的

API。WinSock在

Windows98,Window

NT

中使用。WinSock一般由两部分组成:开发组件和运行组件。开发组件是供程序

员在windows环境下开发网络应用程序使用的,它包括应用程序接口库函数、头

文件和实现的文档,其中最主要的是WINSOCK.H运行组件是以动态链接库(DlL)

来实现socket接口的。文件名为WINSOCK.DLL应用程序在执行时装入它就能实

现网络通信功能

(三)SOCKET连接过程

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程

可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:是服务

器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控

网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是

服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套

接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接

请求。

连接确认:是指当服务器端套接字监听到或者说接收到客户端套接

字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端

套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务

器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

(四)套接字通信

要通过Internet进行通信,至少需要一对套接字,其中一个运行在客户端,

称之为ClientSocket,另一个运行于服务器端面,称为ServerSocket。根据连

接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三个步

骤:服务器监听、客户端请求、连接确认。

服务器监听是指服务端套接字

并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

客户端请求是由客户端的套接字提出连接请求,要连接的目标是服务器端套接

字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务

器套接字的地址和端口号,然后再向服务器端套接字提出连接请求。

连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请

求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的

信息发送给客户端,一旦客户端确认了此连接,连接即可建立。而服务器端继续

处于监听状态,继续接收其他客户端的连接请求。

使用套接字进行数据处理有两种基本模式:同步和异步。

同步模式:

同步模式的特点是在通过Socket进行连接、接收、发送数据时,客户机和

服务器在接收到对方响应前会出于阻塞状态,即一直等到收到对方请求进才继续

执行下面的语句。可见,同步模式只适用于数据处理不太多的场合。当程序执行

的任务很多时,长时间的等待可能会让用户无法忍受。

异步模式:

异步模式的特点是在通过Socket进行连接、接收、发送操作时,客户机或

服务器不会处于阻塞方式,而是利用callback机制进行连接、接收、发送处理,

这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的程序。可见,

异步套接字特别适用于进行大量数据处理的场合。

使用同步套接字进行编程比较简单,而异步套接字编程则比较复杂。

三、程序设计相关介绍及方法

(一)点对点通信

点对点通信实现网内任意两个用户之间的信息交换。电台收到带有点对点通

信标识信息的数据后,比较系统号和地址码,系统号和地址码都与本地相符时,

将数据传送到用户终端,否则将数据丢掉,不传送到用户终端。点对点通信时,

只有1个用户可收到信息。

点对点连接是两个系统或进程之间的专用通信链路。想象一下直接连接两个

系统的一条线路。两个系统独占此线路进行通信。点对点通信的对立面是广播,在广播通信中,一个系统可以向多个系统传输。

电话呼叫是面向电路的两部电话机之间的点对点链路。但是,呼叫通常是通

过电话公司中继线多路复用的;因此虽然电路本身可能是虚拟的,但用户在进行

点对点通信会话。

端到端连接是指通过交换网络的两个系统间的连接。例如,因特网由路由器

网状网组成。数据分组沿着逐跳路径从一个路由器到下一个路由器,一直到达目

的地。每一跳都包括路由器之间的物理点对点链路。因此,一个路由路径包括多

个点对点链路。在ATM和帧中继环境中,端到端路径称为虚电路,它穿越一组预定

义的点对点链路。

共享的LAN,如以太网,提供了一种点对点通信的形式。请记住,在共享的LAN

上,所有的节点都在监听缆路上的信号,因此支持广播。但是,当一个节点向另一

节点发送帧时,只有那个节点接收到帧,可以说两个节点通过共享媒体进行点对

点通信。

通过多点链路的点到多点连接是可能的。多点是指信号由基站到用户端是以

点到多点的方式传送的,而信号由用户端到基站则是以点对点的方式传送的。大

型机和它的终端就是一个例子。提供多点连接的设备通常是一个智能控制器,它

管理来自与它相连的多个设备的信息流。点对点通信在OSI协议栈的物理和数据

链路层和网络层中定义。

(二)WinSocket通信的步骤

1.在服务器端的应用程序中的网络通信的步骤如下

(1)建立服务器端的Socket,开始侦听整个网络中的连接请求。

(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信

息,并建立与客户端之间的连接,再继续进入监听状态。

(3)在监听的过程中,如果有用户发出了请求,则服务器会产生一个新的

连接Socket来处理用户的请求,而原来的Socket仍然会进行监听操作。

(4)当完成通信后,服务器关闭与客户端的Socket连接。

2.在客户端应用程序中的网络通信的步骤如下:

(1)建立一个客户端的Socket。

(2)从命令行中得到服务器的名字,并进行查询以得到服务器的IP地址;

(3)从命令行中得到服务器所提供的端口号,以便进行下一步的操作;

(4)发送连接请求到服务器,并等待服务器的回馈信息。

(5)连接成功后,与服务器进行数据的交互。

(6)数据处理完毕后,关闭自身的Socket连接,释放进行连接所分配的资源,

客户端的程序运行完毕。

服务器方

服务器等待用户从主窗口发来的启动接收消息过程如下:

首先建立自己的套接口。

然后建立连接

调用listen()函数,开始倾听,再通过accept()等待接

收连接。

Accept()等待请求队列中的请求,一旦有连接请求来到,就可以建立一个

与s有相同属性的套接口。

最后关闭套接口。

客户方

客户等待用户从主窗口发来的发送命令,一旦接收到发送请求,调用函数

初始化socket,

窗口函数在收到UNSOCK消息后,判断是由哪个事件引起的,第一次必然是

由连接事件引起的,这样就会执行相同的程序。

(三)程序中用到的过程函数和核心代码

1、

Socket

过程

Socket

过程创建一个套接字并返回一个整型描述符:

Descriptor

=

socket

(

protofamily

type

protocol)

核心代码:sListen

=

socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//

创建服务器监听套节字。

2、

Bind过程

在套接字被创建之后,服务器使用Bind过程提供一个传输层地址,服务器

将通过它等待通信。

Bind(socket

localaddr

addrlen)

其中:

socket

是一个套接字的描述符

localaddr

是将要赋予套接字的本地地址,是sockaddr结构。

Addrlen

是本地地址的长度

3、

Listen过程

服务器调用Listen过程将套接字设为被动模式以使它能被用来等待客户的

通信。

Listen(socket

queuesize)

其中:

socket

是一个套接字的描述符

queuesize表示该套接字的请求队列的长度,请求队列的存在允许系统在服

务器正在处理上一个请求时保存到达的其它请求。

4、

Connect过程

客户使用Connect过程与指定服务器建立连接。

Connect(socket

saddress

saddresslen)

其中:

socket

是客户端计算机上用于该连接的套接字的描述符

saddress

是服务器地址与协议端口号,是sockaddr结构

saddresslen是saddress的长度

5、

Accept过程

服务器调用Accept过程来接受客户的一个连接请求

newsock=

accept

(socket

caddress

caddresslen)

其中:

socket

是服务器已经创建并联编于指定协议端口的套接字的描述符

caddress用于存放客户端的地址,是sockaddr结构

caddresslen是一个指向整型的指针,用于存放caddress的长度

核心代码:sClient

=

accept(sListen,(struct

sockaddr)//建立连接

6、

Send过程

如果套接字已连接,send过程可用来传输数据。

Send(socket

data

length

flags)

其中:

socket是使用的服务器/客户套接字的描述符

data是待发送数据在内存中的地址

length表示数据的字节数

flags包含了请求特殊选项的位,做系统调试用。

核心代码:send(sClient,s_Message,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是要关闭的套接字的描述符

在Winsock中,用closesocket(socket)来关闭套接字。

其他核心代码:

Server端:

WSAStartup(0

x0202,//Initialize

Windows

socket

library

sListen

=

socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建服务器监

听套节字。TCP协议

local.sin_family

=

AF_INET;

//AF_INET指明使用TCP/IP协议族

local.sin_port

=

htons(PORT);//指明连接服务器的端口号

local.sin_addr.s_addr

=

htonl(INADDR_ANY);//自动获取本机地址

bind(sListen,(struct

sockaddr)//

地址绑定到套接字

listen(sListen,1);//开始监听

sClient

=

accept(sListen,(struct

sockaddr)//

建立连接

printf(“Accepte

client:%s:%d/n“,inet_ntoa(client.sin_addr),ntohs(client.sin_port));

HANDLE

hThread=CreateThread(NULL,0,FunThread,0,0,0);//创建接收线

CloseHandle(hThread);

Client端:

WSAStartup(0

x0202,sClient

=

socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

memset(

//先将保存

地址的server置为全0

server.sin_family

=

PF_INET;

//声明地址

格式是TCP/IP地址格式

server.sin_port

=

htons(PORT);

//指明连接

服务器的端口号

server.sin_addr.s_addr

=

inet_addr(SERVER_ADDRESS);

//指明连接

服务器的IP地址

connect(sClient,(struct

sockaddr)

//连到刚才指明的服务器上

HANDLE

hThread=CreateThread(NULL,0,FunThread,0,0,0);

CloseHandle(hThread);

四、系统的原理框图及程序流程图

服务响应

建立连接

服务请求

Receive()

Socket()

Connect()

Send()

等待客户端连接

处理服务器请求

Receive()

Send()

Socket()

Bind()

服务器

Listen()

Accept()

图4.1系统的原理框图

客户

图4.2

上图为服务器端程序流程图

图4.3

客户端程序流程图

五、设计结果及分析

(一)服务器端和客户端在线初始化窗口

图5.1

客户端初始化界面

图5.2

服务器端初始化界面

(二)通信测试

图5.3

先登录客户端界面,无法正常使用

图5.4

测试通信正常(客户端)

图5.5

测试通信正常(客户端)

(以上测试为本地测试,ip地址为本地,如果需要可进行修改)

(三)使用须知

1.本软件使用C语言编写;利用WinSock进行点对点通信,工作机制模仿即

时通信软件的基本功能,分为客户部分和服务器部分两块;

2.本软件为简易的点对点通信软件,只支持设定好的用户双方进行通信;

3.使用时必须先运行服务器端程序,客服端方能运行。只有双方都在运行时

才能进行通信。

4.初次使用必须先进行IP设置,如通信双方有所变化,必须重新设定IP

后才能进行使用;

5.由于是使用Socket进行通信,Socket只是一种通信手段它本身没有任何

额外的安全措施,所以通信数据非常容易被攻击者获取到。再次请使用者在使用

本软件通信时不要涉及隐私等其他个人信息。

6.由于编者能力有限,程序表现出许多不足之处,若果您有任何建议和意见,

请联系编者(Email:[email protected]),本人定虚心求教,谢谢。

六、总结

通过此次的实验,让我对winSocket类的使用有了更深入的了解,并且体会

到计算机网路理论与实际的联系,在关于网络编程的方面也有了新的认识。在调

试程序的时候曾遇到很多困难,在老师同学的帮助下,我最终完成了实验。这次

实验课程增强了我的实践能力,我想对以后的学习和工作有很大帮助。

Socket通信时有我们常使用TCP,UDP协议等等方式进行通信,TCP是面向

连接,安全的协议,例如,我们进行下载等等,就得使用TCP协议,UDP面向无

连接,不安全的协议,但传输数据要比UDP快,用于视频聊天等等,Socket通

信时使用到的协议还有很多。

另外使用Socket进行通信要注意:Socket只是一种通信手段它本身没有任

何额外的安全措施,所以要用到加密技术

,不然通信的数据非常容易初攻击者

获取到

七、参考文献

百度百科socket:

http://baike.baidu.com/view/13870.htm

百度百科TCP/IP协议:

http://baike.baidu.com/view/7649.htm

百度百科

点对点通信:

http://baike.baidu.com/view/1062485.htm

《TCP/IP协议及网络编程技术》

《Windows

网络编程》

《winsock网络程序设计》

《C语言高级程序设计》

    以上《简单的即时通信软件》范文由学科吧精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »学科吧»最新范文»简单的即时通信软件
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 学科吧 如对《简单的即时通信软件》有疑问请及时反馈。All Rights Reserved