收藏 分销(赏)

基于局域网的双工文字语音即时通信系统.doc

上传人:仙人****88 文档编号:9450076 上传时间:2025-03-26 格式:DOC 页数:35 大小:1.94MB
下载 相关 举报
基于局域网的双工文字语音即时通信系统.doc_第1页
第1页 / 共35页
基于局域网的双工文字语音即时通信系统.doc_第2页
第2页 / 共35页
点击查看更多>>
资源描述
摘要 随着网络技术和通信技术的发展,原本属于平行线的网络技术和通信技术终于融合在一起,兴起了一门新的学科—网络通信技术。网络通信技术作为一门在近年来迅猛发展的科学分支,对其进行研究就显得极有意义。 特别是,现今公司企业,国营事业单位都先网络化发展,无论何种行业何种职业都无法自外与网络,那么,基于局域网的网络实时文字语音通信就显得极为之重要。 本论文研究的是基于局域网的双工文字语音即时通信系统,主要为企事业单位内部局域网通信构建一个基本平台,为企事业单位员工展开工作沟通提供便利,让工作人员更为有效的展开工作。 本论文讨论的核心是Socket(套接字)通信技术,以服务器端和客户端实现双方通信。 关键词:网络通信,局域网,文字语音通信系统,Socket ABSTRACT With the development of the network technology and communication technology , now the network technology and communication technology that originally was a parallel line has finally mixtured together, and has risen a new disciplines - network communication technology. Network communications technology in recent years as a rapid development brand of the scientific branch, is very meaningful to be studied. Particularly, today's companies, state-run institutions are all develop the network, regardless of what industry and what career both can not remain outside of the network, so the LAN-based network for real-time voice communication is extremely important. This paper is based on the LAN on the text of the duplex voice instant messaging systems, mainly for internal LAN communications enterprises and institutions is to build a basic platform for enterprises employees to work and communicate more easily, and also for staff to work more effective. This is the core of papers on Socket (socket) communications technology that achieve the two sides’ communication with server and client communication Keywords: Network Communications、LAN、For voice communications system、Socket 目 录 摘要 I ABSTRACT II 目 录 III 第1章 引言 1 1.1 背景 1 1.2 研究内容 1 第2章 设计环境简介 1 2.1、 概述 2 2.2 、C++ 介绍 2 2.3、 C++应用技巧 2 2.4 、Visual C++开发平台 5 2.4.1、概述 5 2.4.2 、VisualC++的主要特点 5 第3章 局域网语音通信系统分析 6 3.1、概述 7 3.2、用户界面 7 3.3、系统实现流程 8 3.3.1、文字聊天 9 3.3.2、语音聊天 10 第4章 语音录入和播放的实现 12 4.1、概述 12 4.2、语音录入与播放涉及的函数简介 12 4.3、语音录入 13 4.4、语音回放 14 第5章 聊天系统的传输 16 5.1、TCP/IP协议 16 5.2 Sockets简介 18 5.3、Windows Sockets 20 5.4 系统的传送过程 21 5.4.1、模/数与数/模转换 21 5.4.2、系统传送流程 21 第6章 结束语 23 致 谢 23 参考文献 25 附录 源代码 26 - 31 - 第1章 引言 1.1 背景 毕业设计(论文)是完成考试计划、实现本科培养目标的一个重要的教学环节。既是培养我们综合能力和工作能力的教育过程,又是对我们素质的一次全面的检验。不但对我们的思想品德、工作态度、工作作风和独立工作能力具有深远的影响,而且,还是对我们的毕业资格及学位资格进行审定的重要依据,因此,对于即将踏上工作岗位的大学生来说,认真严谨的完成毕业设计是十分有益的。经过初步了解,我选定的毕业课题为——网络环境下的语音通信系统。 语音系统的设计涉及到语音信号的输入输出、信号的采样、信号的保存与传输,紧扣本专业所学知识。通过对语音即时通信系统的设计能对大学四年所学知识的一个总结与概括,能将所学知识应用与实际工作中,更能为以后工作积累经验,所以,本人的语音即时通信系统是有其一定意义的。 伟大的科学家牛顿曾经说过,他的成功是站在巨人的肩膀上的。更何况与我,所以,本课题在设计过程中借鉴了一系列前人的工作,同时,本课题在前人的基础上也有其创新之处,诸如能同时实现文字语音功能,能自动识别本机IP地址等等。这就更进一步说明,本课题有其实际应用价值。 1.2 研究内容 本论文主要的研究方向是如何在局域网中实现双方双工通信(包括语音和文字),设计的模块有:服务器端与客户端界面的设计、语音的录入与回放、通信双方的传输。 在服务器与客户端界面上采用Windows标准窗口模式,包括标题栏、文字对话窗口、IP地址栏、建立服务器和连接服务器按钮、语音聊天按钮等实现功能的必要部件。 语音的录入与回放部分采用Visual C++语言实现,其中涉及到语音的采样频率、语音录入与保存和语音回放等功能。 在通信双方传输部分采用TCP/IP协议,保证了通信双方的安全与无平台性。在双方端口的设计上采用Socket机制,为通信双方建立一条可靠的连接,即客户端发出请求,服务器端监听来自客户端的请求,并为客户端提供服务。 第2章 设计环境简介 2.1、 概述 Visual C++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用C++的一个开发平台。 2.2 、C++ 介绍 C++,这个词在中国程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 14882-1998。 2.3、 C++应用技巧 1、使用new和delete进行动态内存分配和释放   运算符new和delete是C++的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点:   (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。   (2)自动地返回正确的指针类型,不用进行强制指针类型转换。   (3)可以用new对分配的对象进行初始化。   使用例子:   (1)int* p;     p=new int[10]; //分配一个含有10个整数的整形数组     delete[] p; //删除这个数组   (2)int* p;     p=new int (100);//动态分配一个整数并初始化 2、使用inline内连函数替代宏调用   对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) ((a)<0?(-a):(a)), 当使用abs(i++)时,这个宏就会出错。   所以在C++中应该使用inline内连函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。   使用内连函数只须把inline关键字放在函数返回类型的前面。例如: inline int Add(int a,int b);//声明Add()为内连函数   这样编译器在遇到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。 3、使用函数重载   在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C++中,函数名相同而参数不同的两个函数被解释为重载。例如: void PutHz(char* str);//在当前位置输出汉字 void PutHz(int x,int y,char * str);//在x,y处输出汉字   使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。 4、使用引用(reference)代替指针进行参数传递   在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如:    void Add(int *a) { *a++;}调用时则使用 Add(&x)//其中x为int或可以转化为int的类型,如unsigned int, 但这时候编译器通过回给出warning   对于复杂的程序,使用指针容易出错,程序也难以读懂。在C++中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如使用引用的函数定义为:   void Add(int& a){a++;}//a为一个整数的引用 调用时使用 Add(x)//其中x为int。   这个函数与使用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。 5、使用缺省参数   在C++中函数可以使用缺省参数,例如: void PutHzxy(char *str,int x=-1, int y=-1) { if(x==-1) x=wherex(); if(y==-1) x=wherex(); moveto(x,y); PutHx(str); }   可以有三种方式调用函数PutHzxy(),例如: PutHzxy("C++语言");//使用缺省参数在当前位置输出 PutHzxy("C++语言",10,10);//没有使用缺省参数 PutHzxy("C++语言",10);//对y使用缺省参数,指定x的位置   通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C++的代码中都大量地使用了缺省参数。   需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。   例如:  void PutHzxy(char*str,int x=-1,int y=-1)//正确 void PutHzxy(int x=-1,int y=-1,char*str)//错误 6、使用STL STL(Standard Template Library,标准模板库), STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),并包括一些工具类如auto_ptr。几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。 #include<vector>// 包含相关的头文件/ typedef std::vector<int> intvector;//使用typedef 使代码看起来更简洁 int main() { intvector vi; for(int i=0;i<10,i++) vi.push_back(i);//使用push_back添加元素 for(int i=0;i<vi.size();i++) std::cout<<vi<<" ";//[]操作符被重载,使得我们可以像访问数组一样访问vector中的元素 } 2.4 、Visual C++开发平台 2.4.1、概述 C++作为一种应用广泛的语言,她有众多的编译平台,包括visual C++、visual studio、Borland C++ 、C++ Builder 、eclipse(CDT) 、Dev-C++、Gcc。本论文代码的编写采用的是Visual C++平台。 随着Windows操作系统的普及,应用程序的外观和结构发生了巨大的变化,程序卡发环境也越来越完善。Visual C++是基于C++语言的,因此,VC++开发工具支持标准的C++语言。但是VC++又保有自己的特色,对C++进行了适当的扩充,使之使用Windows平台下的程序开发。 2.4.2 、VisualC++的主要特点 1自动化和宏功能 自动化(Automation)功能用于实现一些重复性过程和工作。宏记录功能可以根据用户的操作自动生成宏操作序列。Visual Studio及其组件都可以看作对象来处理,这意味着可以进行自动化和诸如打开、编辑、关闭文档和调整窗口等操作。 2 可定制的工具栏和菜单 可以灵活的定制菜单栏和工具栏,使其更适合工作需要。如可以创建新的工具条和菜单。 3 调试器 可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。 4 支持Internet连接 可以直接在集成开发环境(IDE)中查看网页页面,可以使用InfoViewer或注册的Web浏览器查看Web上的页面。该特性可以让Visual Studio用户了解最新信息、获取更新的文档以及完成产品的升级和修正工作。 5 项目工作区和文件 一个新的便捷的项目系统应该可以允许一个工作区内包含多个不同的项目类型。比如说,可以创建一个包含Visual C++工程和J++ Applet的工作区。 6 在工作区内可以包含多个并列的工程文件 要在当前工作区中增加一个工程,可以打开该工作区,然后选择“Project|Insert Project into Workspace”菜单命令。通过选择“Project|Set Active Project”菜单命令,可以设置当前活动工程,也就是执行Build操作时编译的那一个工程。 7 增强的资源编辑器 可以在对话框中使用WizardBar将程序同可视化元素联系起来。 第3章 局域网语音通信系统分析 3.1、概述 语音聊天通信系统的设计思路是发送声音的一端(客户端)将硬件接口采集到的声音数据通过Socket发送到另外一端(服务器端,亦可称为另一客户端),另外一端根据得到的声音数据调用硬件接口播放声音。其核心就是声音数据的采集、播放和声音数据的网络传输。 依据思路,程序设计出如下几个模块: 在服务器与客户端界面上采用Windows标准窗口模式,包括标题栏、文字对话窗口、IP地址栏、建立服务器和连接服务器按钮、语音聊天按钮等实现功能的必要部件。 语音的录入与回放部分采用Visual C++语言实现,其中涉及到语音的采样频率、语音录入与保存和语音回放等功能。 在通信双方传输部分采用TCP/IP协议,保证了通信双方的安全与无平台性。在双方端口的设计上采用Socket机制,为通信双方建立一条可靠的连接,即客户端发出请求,服务器端监听来自客户端的请求,并为客户端提供服务。 3.2、用户界面 一个好的通信系统要求其有友善容易操作的界面,所以系统的界面采用我们最为熟悉的Windows标准界面,又由于该系统的服务器端和客户端采用相同的界面,主要包括标题栏、主聊天窗口、输入窗口、IP地址和端口号窗口、连接服务器按钮、建立服务器按钮、语音聊天按钮和结束通信按钮(The End),如图3.2.1所示,简要介绍一下该通信系统的界面。 标题栏:包括系统名称“VioceChatRoom”和关闭按钮。主要实现推出系统的功能。 主聊天窗口:这是该通信系统的主窗口,做服务器端用时将显示服务器建立信息,当为客户端用时将显示与服务器端是否成功建立信息;同时更是文字聊天时 双方文字显示窗口,双方的聊天文字将在这一窗口显示。 输入窗口:此窗口为文字聊天中的输入窗口,用户待发送的文字将先在此窗口显示,按Eneter建将发送,发送后同时在双方的主聊天窗口中显示发送内容。 IP地址和端口号窗口:此窗口将显示IP地址与端口号,默认时IP地址为本地地址,当做服务器端是可以免设置,当为客户端用时,只需输入对方的IP地址即可。 建立服务器按钮:当该系统用户做为服务器端时,要建立双方通信必须先建立服务器,点此一按钮即可成功创建服务器,为客户端时,该按钮不起作用。 连接服务器按钮:当该系统用户为客户端时,要与服务器端建立连接,此一按钮的功能是实现与服务器的连接,当该系统作为服务器端时,该按钮不起作用。 语音聊天按钮:默认时,该系统只可以进行文字聊天,该按钮的功能是用于发起语音聊天请求,在语音聊天发出后将该按钮将变为“结束语音聊天”按钮。 结束通信按钮:此按钮为结束双方通信按钮,当通信中的其中一方使用该按钮将结束通信。 图3.2.1 用户界面图 3.3、系统实现流程 该系统不仅能实现文字聊天,更能实现语音聊天,下面将详细接受其实现过程。 3.3.1、文字聊天 当局域网内一个用户(用户1)要向另一用户(用户2)发起文字聊天请求时,需先得到对方的IP地址,并协议其中一个用户为服务器端(现假设用户1为服务器端),建立服务器后,用户2输入用户1的IP地址,建立连接,等待对方应答,取得对方同意后,即可进行文字聊天。 用户1在本地对话框中输入聊天内容后,按发送键,文字通过局域网连接线传输到对方对话框界面,由此实现双方的通信。图3.3.1为文字通信简图: 图3.3.1.1文字通信流程图 图3.3.1.2 文字聊天演示图 3.3.2、语音聊天 当用户1发起语音聊天请求时,等待用户2的应答,当用户2拒接时,语音通信结束,当用户2接受语音聊天时即可进行语音聊天。 用户1通过语音录入设备录入语音,语音经局域网连接线传输到用户2客户端,对方在接收到语音后通过播音设备语音进行播放。 当然,此一过程为双工过程,在用户1向用户2传送语音的同时,用户2亦可以向用户1传送语音,反之亦然。图3.3.2.1为语音通信简图: 图3.3.2.1 语音通信流程图 第4章 语音录入和播放的实现 4.1、概述 语音通信系统中最为主要的是语音的录入与播放,在本课题中采用Visual C++语言进行录入与播放的设计。 在应用程序中,处理波形音频有多种方法。其中一种方法是使用PlaySound函数,但是PlaySound是一个只能狗播放波形音频文件的函数,因此不能胜任语音录入和播放等失真要求较高的应用。所以,本课题采用另一函数——API函数,此函数主要应用到比较底层的波形音频处理,所以,能胜任对语音的失真度要求。 4.2、语音录入与播放涉及的函数简介 语音的录入涉及到众多的函数,其中包括打开设备、录音、保存录音文件等功能,在播音方面也涉及接收、播放和关闭等功能,下面我们将详细介绍实现这些功能的函数: 1、PlaySound函数 PlaySound函数可以播放一个有文件命、资源号或者是系统事件决定的波形音频数据。 2、waveInGetNumDevs/waveOutGetNumDevs函数 waveInGetNumDevs函数返回当前系统中的波形音频输入/输出设备的数目。如果该函数返回0,则表示无音频输入输出设备或发生了其他错误。这个函数一般在程序初始时对音频硬件设备进行检测。 3、waveInOpen函数 waveInOpen函数用来打开一个指定的音频输入设备并设置音频数据捕获后的处理方法。 4、waveInPrepareHeader函数 waveInPrepareHeader函数主要用来准备一块接收音频输入的缓冲区。 5、waveInAddBuffer函数 waveInAddBuffer函数想音频输入设备传送一块输入缓冲区,当缓冲区被填满的时候,程序会接到通知。 6、waveInStart/ waveInStop函数 waveInStart/waveInStop函数用来在某个音频输入设备上开始/停止录音。 4.3、语音录入 语音的录入是该通信系统的关键之一,录音的准备工作主要有:打开录音设备;获得录音句柄;指定录音格式;分配若干用于录音的缓冲区。开始录音是时,先将所有内存块提供给录音设备用来录音,录音设备就会依次将语音数据写入内存,当一块内存写满,录音设备就会发一个Window消息MM_WIM_DATA给相应的窗口,通知程序做相关的处理,本课题中的处理方式是把数据通过网络连接线发送并且在本地机子上播放出来,然后把内存置空,返还给录音设备进行录音,这样就形成一个循环录音过程。结束录音只要释放所有内存块,并关闭录音设备即可。以下是录音过程中的函数调用顺序: WAVEFORMATEX waveformat; waveformat.wFormatTag=WAVE_FORMAT_PCM; waveformat.nChannels=1; waveformat.nSamplesPerSec=8000; waveformat.nAvgBytesPerSec=16000; waveformat.nBlockAlign=2; waveformat.cbSize=0; waveformat.wBitsPerSample=16;//指定录音格式 //打开录音设备,采用窗口方式接收音频信息 Inters=waveInOpen(&m_hWaveIn,WAVE_MAPPER,&waveformat, -(DWORD)m_hWnd,Ol,CALLBACK_WINDOW) //准备录音缓冲区 waveOutPrepareHeader(m_hWaveIn,m_pWaveHdr[i],sizeof(WAVEHDR)); //向音频输入设备传送一块缓冲区。当缓冲区填满的时候,程序会得到通知 waveOutAddBuffer(m_hWaveIn,m_pWaveHdr[i],sizeof(WAVEHDR)); //开始录音 waveInStart(m_hWaveIn); //停止录音 waveInStop(m_hWaveIn); //清空内存块 waveInReset(m_hWaveIn); //关闭录音设备 waveInClose(m_hWaveIn); 图4.3.1为实现顺序图: 图4.3.1 录音顺序图 4.4、语音回放 语音的回放也是本课题的关键,能否无失真的接受对方的语音信号关乎通信能否成功的进行,所以,从某个角度来说,语音的录入和回放是本课题的核心,就技术而言,语音的回放和语音的录入有其相似之处,下面将详细介绍。 语音播放的前期工作包括:打开语音播放设备;获得语音句柄;分配若干用于播音的缓冲区。开始播音是,播音设备取得内存的使用权,内存将语音依次传到播音设备中去,播音设备依次播放语音,如此循环,实现了语音的即时播放。结束播音只要释放内存,关闭播音设备即可,下面是播音的函数调用过程: WAVEFORMATEX waveformat; waveformat.wFormatTag=WAVE_FORMAT_PCM; waveformat.nChannels=1; waveformat.nSamplesPerSec=8000; aveformat.nAvgBytesPerSec=16000; waveformat.nBlockAlign=2; waveformat.cbSize=0; waveformat.wBitsPerSample=16;//指定播音格式 //打开播音设备,采用窗口方式接收音频信息 Inters=waveOutOpen(&m_hWaveIn,WAVE_MAPPER,&waveformat, -(DWORD)m_hWnd,Ol,CALLBACK_WINDOW) //准备播音缓冲区 waveOutPrepareHeader(m_hWaveIn,m_pWaveHdr[i],sizeof(WAVEHDR)); //向音频输出设备传送一块缓冲区。当缓冲区填满的时候,程序会得到通知 waveOutAddBuffer(m_hWaveIn,m_pWaveHdr[i],sizeof(WAVEHDR)); //开始播音 waveOutWrite(m_hWaveIn); //停止播音并清除内存块 waveOutRest(m_hWaveIn); //关闭播音设备 waveOutUnprepareHeader(m_hWaveIn); 图4.4.1为播音实现顺序图: 图4.4.1 播音数序图 第5章 聊天系统的传输 5.1、TCP/IP协议 这部分简要介绍一下TCP/IP的内部结构。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。 TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为(如图5.1.1 TCP/IP原理图): 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。 应用层 传输层 互连网络层 网络接口层 图5.1.1 TCP/IP原理图 上文已说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组,以下简单介绍TCP/IP中的协议具备的功能和工作原理: 1、IP协议 网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。 2.、TCP 协议 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。 面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。 3、UDP协议 UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。 欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。 4.ICMP 协议 ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。 5.2 Sockets简介 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 其实现原理框图如图5.2.1所示: 图5.2.1 Socket原理图 如何利用Socket开发一个Server-Client模型的程序 开发原理:     服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。      客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。 socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。  一个完整的socket有一个本地唯一的socket号,由操作系统分配。最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket,系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求。 5.3、Windows Sockets Windows Sockets 规范以U.C. Berkeley 大学BSD UNIX 中流行的Socket 接口为范例定义了一套microsoft Windows 下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket 风格的库函数;也包含了一组针对Windows 的扩展库函数,以使程序员能充分地利用Windows 消息驱动机制进行编程。 Windows Sockets 规范本意在于提供给应用程序开发者一套简单
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服