利用Socket实现双机通信 2.docx
- 文档编号:5201311
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:11
- 大小:99.16KB
利用Socket实现双机通信 2.docx
《利用Socket实现双机通信 2.docx》由会员分享,可在线阅读,更多相关《利用Socket实现双机通信 2.docx(11页珍藏版)》请在冰豆网上搜索。
利用Socket实现双机通信2
河南理工大学
计算机科学与技术学院
课程设计报告
2013—2014学年第一学期
课程名称计算机网络
设计题目利用socket实现双机通讯
姓名
学号
专业班级
指导教师
2014年01月01日
摘要
所谓socket通常也称作“套接字”,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
Socket是建立网络连接时使用的。
在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
Socket是基于Tcp/IP的编程端口,采用客户/服务器通讯机制,使客户端与服务端通过socket接口在网络上实验上实现连接和数据交换。
你它提供了一系列系统调用,使用户可以方便的实现网络通信。
本文通过c++来实现双机通讯,实现一个简单的服务器。
关键字:
socket套接字C++双机通讯
一、设计题目
利用Socket实现双机通信
二、设计任务
利用WinSock来实现双机通信,理解TCP状态机图。
要求使用WinSock编程,采用其中的TCP面向连接方式,实现文本数据的交换。
三、VisualC++简介
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VisualC++它大概可以分成三个主要的部分:
1、 DeveloperStudio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“MicrosoftVisualC++”,所以很多人理所当然的认为,那就是VisualC++了。
其实不然,虽然DeveloperStudio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。
我们也知道,DeveloperStudio并不是专门用于VC的,它也同样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。
所以不要把DeveloperStudio当成VisualC++, 它充其量只是VisualC++的一个壳子而已。
2、 MFC。
从理论上来讲,MFC也不是专用于VisualC++,BorlandC++,C++Builder和SymantecC++同样可以处理MFC。
同时,用VisualC++编写代码也并不意味着一定要用MFC,只要愿意,用VisualC++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,VisualC++本来就是为MFC打造的,VisualC++中的许多特征和语言扩展也是为MFC而设计的,所以用VisualC++而不用MFC就等于抛弃了VisualC++中很大的一部分功能。
但是,VisualC++也不等于MFC。
3、PlatformSDK。
这才是VisualC++和整个VisualStudio的精华和灵魂,
虽然我们很少能直接接触到它。
大致说来,PlatformSDK是以MicrosoftC/C++
编译器为核心(不是VisualC++,看清楚了),配合MASM,辅以其他一些工具和文档资料。
上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?
是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成VisualStudio的基石。
四、TCP简介及特点原理
4.1.什么是TCP
TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transportlayer)通信协议。
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的中间层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。
之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。
然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。
在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。
在拥塞控制上,采用慢启动算法。
4.2TCP功能
提供计算机程序间连接、检测和丢弃重复的分组、完成数据报的确认、流量控制和网络拥塞。
4.3TCP所提供服务的主要特点
(1)面向连接的传输;
(2)端到端的通信;
(3)高可靠性,确保传输数据的正确性,不出现丢失或乱序;
(4)全双工方式传输;
(5)采用字节流方式,即以字节为单位传输字节序列;
(6)紧急数据传送功能。
4.4TCP支持的服务器类型
不管怎样,TCP/IP是一个协议集。
为应用提供一些\"低级\"功能,这些包括IP、TCP、UDP。
其它是执行特定任务的应用协议,如计算机间传送文件、发送电子邮件、或找出谁注册到另外一台计算机。
因此,最重要的\"商业\"TCP/IP服务有:
✧文件传送FileTransfer
✧远程登录Remotelogin
✧计算机邮件Mail
✧网络文件系统(NFS)
✧远程打印(Remoteprinting)
✧远程执行(Remoteexecution)
✧名字服务器(Nameservers)
✧终端服务器(Terminalservers)
4.5TCP的端口号
TCP段结构中端口地址都是16比特,可以有在0~65535范围内的端口号。
对于这65536个端口号有以下的使用规定:
(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。
任何TCP/IP实现所提供的服务都用1~1023之间的端口号,是由IANA来管理的;
(2)客户端只需保证该端口号在本机上是惟一的就可以了。
客户端口号因存在时间很短暂又称临时端口号;
(3)大多数TCP/IP实现给临时端口号分配1024~5000之间的端口号。
大于5000的端口号是为其他服务器预留的。
五、WinSocket通信的原理
5.1、Socket机制
套接字(Sockets)是美国加州大学伯克利(Berkeley)分校为UNIX操作系统开发的一个网络通信应用程序接口。
由于因特网和Windows的普及,后又将Sockets移植到Windows下,成为WindowsSockets(常称WinSock).
套接字数据传输是一种特殊的I/O,套接字也是一种文件描述符。
Socket具有一个类似于打开文件的函数调用----socket(),该函数返回一个整型的Socket描述符,随后的建立连接、数据传输等操作都是通过该Socket实现的。
Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。
客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。
5.2Socket通信机制
提供了两种通讯方式:
有联接和无联接方式,分别面向不同的应用需求。
使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。
在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。
使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。
在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。
WinSocket通信的原理
WinSock是一个基于Socket模型的API。
WinSock在Windows98,WindowNT中使用。
WinSock一般由两部分组成:
开发组件和运行组件。
开发组件是供程序员在windows环境下开发网络应用程序使用的,它包括应用程序接口库函数、头文件和实现的文档,其中最主要的是WINSOCK.H运行组件是以动态链接库(DlL)来实现socket接口的。
文件名为WINSOCK.DLL应用程序在执行时装入它就能实现网络通信功能
六、设计方案
6.1、WinSocket通信的步骤如下:
(1)、在服务器端的应用程序中,网络通信的步骤如下:
建立服务器端的Socket,开始侦听整个网络中的连接请求。
当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接,再继续进入监听状态。
在监听的过程中,如果有用户发出了请求,则服务器会产生一个新的连接Socket来处理用户的请求,而原来的Socket仍然会进行监听操作。
当完成通信后,服务器关闭与客户端的Socket连接。
(2)、在客户端应用程序中,网络通信的步骤如下:
建立一个客户端的Socket。
从命令行中得到服务器的名字,并进行查询以得到服务器的IP地址;
从命令行中得到服务器所提供的端口号,以便进行下一步的操作;
发送连接请求到服务器,并等待服务器的回馈信息。
连接成功后,与服务器进行数据的交互。
数据处理完毕后,关闭自身的Socket连接,释放进行连接所分配的资源,客户端的程序运行完毕。
6.2、程序中用到的过程函数
介绍如下:
1、Socket过程
Socket过程创建一个套接字并返回一个整型描述符:
Descriptor=socket(protofamilytypeprotocol)
其中:
protofamily:
AF-INET表示TCP/IP协议系列
type:
SOCK_STREAM表示面向连接的流传输
SOCK_DGRAM表示无连接的面向消息传输
Protocol:
一般情况下为0
2、Bind过程
在套接字被创建之后,服务器使用Bind过程提供一个传输层地址,服务器将通过它等待通信。
Bind(socketlocaladdraddrlen)
其中:
socket是一个套接字的描述符
localaddr是将要赋予套接字的本地地址,是sockaddr结构。
Addrlen是本地地址的长度
3、Listen过程
服务器调用Listen过程将套接字设为被动模式以使它能被用来等待客户的通信。
Listen(socketqueuesize)
其中:
socket是一个套接字的描述符
queuesize表示该套接字的请求队列的长度,请求队列的存在允许系统在服务器正在处理上一个请求时保存到达的其它请求。
4、Connect过程
客户使用Connect过程与指定服务器建立连接。
Connect(socketsaddresssaddresslen)
其中:
socket是客户端计算机上用于该连接的套接字的描述符
saddress是服务器地址与协议端口号,是sockaddr结构
saddresslen是saddress的长度
5、Accept过程
服务器调用Accept过程来接受客户的一个连接请求
newsock=accept(socketcaddresscaddresslen)
其中:
socket是服务器已经创建并联编于指定协议端口的套接字的描述符
caddress用于存放客户端的地址,是sockaddr结构
caddresslen是一个指向整型的指针,用于存放caddress的长度
6、Send过程
如果套接字已连接,send过程可用来传输数据。
Send(socketdatalengthflags)
其中:
socket是使用的服务器/客户套接字的描述符
data是待发送数据在内存中的地址
length表示数据的字节数
flags包含了请求特殊选项的位,做系统调试用。
7、Recv过程
一个应用可以条用recv从一个连接的套接字接收数据。
Recv(socketbufferlengthflags)
其中:
socket是从中接收数据的服务器/客户套接字的描述符
buffer表示内存中用来存放接收数据的地址
length表示缓冲区的大小
flags包含了请求特殊选项的位,做系统调试用。
8、Close过程
Close过程告诉系统终止对一个套接字的使用。
Close(socket)
其中:
socket是要关闭的套接字的描述符
在Winsock中,用closesocket(socket)来关闭套接字。
七、实验中的问题
1、在建立Socket连接时,两端的端口号必须设为一致,否则建立不了连接。
服务器端必须有主机IP地址或主机名参数。
2、如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。
3、必须先连接服务器端,再连接客户端,否则,不能预期将服务器端和客户端连通。
4、建立好连接之后,必须按照给定的格式输入通信信息,即m+输入的信息内容,否则,将会出现“nothiscommand”的提示。
八、系统的原理框图
九、实验结果分析
调试程序后,会出现一个doc窗口,服务器端运行界面如下图2所示。
输入“s”,并单击回车,服务器连通。
客户端界面退出。
图2客户端界面
调试程序后,服务端会出现如下图3所示。
Ctrl+C退出。
图3服务器端界面
客户端输入一个“s”,服务端运行界面如图4所示:
图4服务器端界面
十、设计总结
在为期两周的课程设计中,我体会颇多,学到很多东西。
对基于winsock双机通信有了新的认识,明白了双机通信的基本原理及步骤。
更深一步的认识了TCP协议的应用及其特点。
对MicrosoftVisualC++6.0集成开发环境也有了更深入的认识,使我熟练和掌握了有关visualC++中的一些主要知识点和应用点。
可以有所学有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。
总之,通过这次课程设计,我收获颇丰,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力,相信会为自己以后的学习和工作带来很大的好处。
最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我对编程更加热爱了。
在此感谢本次课程设计中老师和同学对我的关心和帮助,诚心诚意感谢他们对我的鼓励与教导,是他们在我迷茫的时候给了我些许提示,激发了我编程的灵感,他们也给了我不少的提示和帮助,是他们让我有信心坚持做下来,在此感谢他们!
十一、参考文献
参考资料:
技术参考:
Winsock,Winsock的主要方法(Method),TCP状态机
参考书目:
【1】WINSOCK2网络编程实用教程李凌清华大学出版社2003
【2】WINSOCK网络程序设计邓全良中国铁道出版社2002
【3】WINDOWS网络编程技术AnthonyJones机械工业出版社2000
【4】WINDOWS网络编程之VB篇萧秋水文娟清华大学出版社2001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用Socket实现双机通信 利用 Socket 实现 双机 通信
![提示](https://static.bdocx.com/images/bang_tan.gif)