计算机网络课程设计报告--利用Winsock实现双机通信.docx

上传人:李司机 文档编号:6724964 上传时间:2024-01-10 格式:DOCX 页数:14 大小:87.49KB
返回 下载 相关 举报
计算机网络课程设计报告--利用Winsock实现双机通信.docx_第1页
第1页 / 共14页
计算机网络课程设计报告--利用Winsock实现双机通信.docx_第2页
第2页 / 共14页
计算机网络课程设计报告--利用Winsock实现双机通信.docx_第3页
第3页 / 共14页
计算机网络课程设计报告--利用Winsock实现双机通信.docx_第4页
第4页 / 共14页
计算机网络课程设计报告--利用Winsock实现双机通信.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计算机网络课程设计报告--利用Winsock实现双机通信.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告--利用Winsock实现双机通信.docx(14页珍藏版)》请在三一办公上搜索。

1、课程设计报告20142015学年第一学期课程名称计算机网络设计题目利用Winsock实现双机通信.2摘要、目2,二、)P)I2(一)、VisualC+6.0简介2(二)、VisualC+6.0主要组成2qq、TCP/P)I.*3()、TCP/TP)I3(.)、TCP4=Ii、TllnSockj4()、I,a5.socket.4(二)WinSocket的通信原理5()、5/、7(一)、WinSocket通信的步骤:79()、服务器弋码9(*)、11,1、13九、课程设计的总结体会13卜、14利用socket实现双机通信一、摘要Socket通信机制提供了两种通信方式:有连接(TCP)和无连接方式(

2、UDP),分别面线不同的应用需求。使用有连接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须必须创建一个联接过程并建立一条通信链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。使用无连接方式时其系统开销比有连接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通信链路,网络通信操作在不同的主机和进程之间转发进行。关键字:WinSOCk、TCP、VC+、双机通信二、目的和要求利用WinSock来实现双机通信,理解TCP状态机图。要求使用WinSock编程,采用其

3、中的TCP面向连接方式,实现文本数据的交换。三、开发环境简介(一)、VisualC+6.0简介VisualC+6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。ViSUalC+是一个功能强大的可视化软件开发工具。自1993年MiCrOSOft公司推出ViSUalC+1.0后,随着其新版本的不断问世,VisualC+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了VisualC+.NET(VisualC+7.0),但它的应用的很大的局限性,只适用于Windows2000WindowsXP和WindowsNT4.O0所以实际中

4、,更多的是以ViSUaIC+6.0为平台。ViSUalC+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC+6.0由许多组件组成,包括编辑器、调试器以及程序向导APPWiZard、类向导ClaSSWiZard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。(二)、VisualC+6.0主要组成1、DeveloperStudio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Mier。So

5、ftViSUalC+”,所以很多人理所当然的认为,那就是ViSUalC+了。其实不然,虽然DeVeIOPerStUdiO提供了一个很好的编辑器和很多WiZard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Devel。PerStUdio并不是专门用于VC的,它也同样用于VB,VJ,VlD等ViSUalStUdio家族的其他同胞兄弟。所以不要把DeVeIOPerStUdiO当成ViSUalC+,它充其量只是ViSUalC+的一个壳子而已。这一点请切记!2、MFCo从理论上来讲,MFC也不是专用于ViSUalC+,BorlandC+,C+Builder

6、和SynIanteCC+同样可以处理MFCo同时,用ViSUalC+编写代码也并不意味着一定要用MFC,只要愿意,用ViSUaIC+来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,ViSUalC+本来就是为MFC打造的,VisualC+中的许多特征和语言扩展也是为MFC而设计的,所以用VisualC+而不用MFC就等于抛弃了VisualC+中很大的一部分功能。但是,VisualC+也不等于MFC03、PlatformSDK0这才是VisualC+和整个VisualStudio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,PIatfonnSDK是以MiCrOSOftC/C+编

7、译器为核心(不是ViSUalC+,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到DeVeIoPerStUdio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成ViSUalStUdio的基石。四、TCP/IP简介(一)、TCP/IP简介TCP/IP(TransmissionControlProtocol/InternetProtOCOD的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、InteInet国际互联网络的基础,简单地说,就是由网络层的IP

8、协议和传输层的TCP协议组成的。TCP(TransmissionControlProtocol)中文称为传输控制协议”。TCP是一种面向连接的、可靠的、基于字节流的运输层(Transportlayer)通信协议。在简化的计算机网络OSl模型中,它完成第四层传输层所指定的功能(UDP)是同一层内另一个重要的传输协议。IP是英文InternetProtoCol的缩写,中文称为“网际协议”,是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守,IP协议就可以

9、与因特网互连互通。(二)、TCP作用在因特网协议族中,TCP层是位于IP层之上,应用层之下的中间层。提供可靠的、像管道一样的连接。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段,通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK),如果发送端实体在合理的往返时延(Rn)内未收到确认,那么对应的数据

10、,假设丢失了,将会被重传。TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和。首先,TCP建立连接之后,通信双方都同时可以进行数据的传输。其次,TCP通信是全双工的,在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用慢启动算法。TCP所提供服务的主要特点有:1、面向连接的传输;2、端到端的通信;3、高可靠性、确保传输数据的正确性,不出现丢失或乱序;4、全双工方式传输;5、采用字节流方式,即以字节为单位传输字节序列;6、紧急数据传送功能。五、WinSock简介(一)、什么是SOCket

11、所谓s。Cket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。SoCket接口是TCP/IP网络的APLSOCket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。SOCket接口设计者最先是将接口放在Unix操作系统里面的。如果了解UniX系统的输入和输出的话,就很容易了解SOCket了。网络的S。Cket数据传输是一种特殊的I/O,S。Cket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket

12、O,该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)0流式是一种面向连接的SoCket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。最重要的是,socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的SoCket系统调用。客户随机申请一个SoCket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务

13、器拥有全局公认的s。Cket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。SoCket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket半相关为全局所公认非常重要。不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的SOCket固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。(二)、WinSocket的通信原理WinSOCk是一个基于SOCket模型的API。WinSoCk在Windows98,WindowNT中使用。WinSoCk一般由两部分组成:开发组件和运行组件

14、。开发组件是供程序员在WindoWS环境下开发网络应用程序使用的,它包括应用程序接口库函数、头文件和实现的文档,其中最主要的是WINSOCK.H运行组件是以动态链接库(DlL)来实现socket接口的。文件名为WINSOCK.DLL应用程序在执行时装入它就能实现网络通信功能(三)、基本套接字1、创建套接字SOCketO功能:使用前创建一个新的套接字格式:SOCKETPASCALFARsocket(intaf,inttype,intprocotol);参数:af:通信发生的区域type:要建立的套接字类型PrOCotol:使用的特定协议2、指定本地地址bind()功能:将套接字地址与所创建的套接

15、字号联系起来。格式:intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);参数:s:是由SoCket()调用返回的并且未作连接的套接字描述符(套接字号)。其它:没有错误,bind。返回0,否则SoCKET_ERROR地址结构说明:structsockaddr_inshortsin_famiIy;/AF_INETu_shortsin_port;16位端口号,网络字节顺序structin_addrsin_addr;32位IP地址,网络字节顺序charsin_zero8;保留)3、建立套接字连接ConneCt()和accep

16、t()功能:共同完成连接工作格式:intPASCALFARconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);SOCKETPASCALFARaccept(SOCKETs,structsockaddrFAR*name,intFAR*addrlen);参数:同上4监听连接IistenO功能:用于面向连接服务器,表明它愿意接收连接。格式:intPASCALFARlisten(SOCKETs,intbacklog);5、数据传输Send()与recv()功能:数据的发送与接收格式:intPASCALFARsend(SOCKETs,constc

17、harFAR*buf,intlen,intflags);intPASCALFARrecv(SOCKETs,constcharFAR*buf,intlen,intflags);参数:buf:指向存有传输数据的缓冲区的指针。6、多路复用select()功能:用来检测一个或多个套接字状态。格式:intPASCALFARselect(intnfds,fd_setFAR*readfds,fd_setFAR*writefds,fd_setFAR*exceptfds,conststructtimevalFAR*timeout);参数:readfds:指向要做读检测的指针WritefdS:指向要做写检测的指针

18、exceptfds:指向要检测是否出错的指针timeout:最大等待时间7、关闭套接字closesocket()功能:关闭套接字S格式:BOOLPASCALFARclosesocket(SOCKETs);六、设计方案(一)、WinSoCkCt通信的步骤:1、在服务器端的应用程序中的网络通信的步骤如下:(1)建立服务器端的SoCket,开始侦听整个网络中的连接请求。(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接,再继续进入监听状态。(3)在监听的过程中,如果有用户发出了请求,则服务器会产生一个新的连接Socket来处理用户的请求,而原来的Socke

19、t仍然会进行监听操作。(4)当完成通信后,服务器关闭与客户端的SOCket连接。2、在客户端应用程序中的网络通信的步骤如下:(1)建立一个客户端的Socketo(2)从命令行中得到服务器的名字,并进行查询以得到服务器的IP地址;(3)从命令行中得到服务器所提供的端口号,以便进行下一步的操作;(4)发送连接请求到服务器,并等待服务器的回馈信息。(5)连接成功后,与服务器进行数据的交互。(6)数据处理完毕后,关闭自身的SOCket连接,释放进行连接所分配的资源,客户端的程序运行完毕。(二)、系统实现的过程图七、程序代码(一)、服务器端代码ftincludenclude#Pragmacomment(

20、lib,ws232.lib)intmain()(WSDTwsaData;WSAStartup(MKEWORD(2,2),wsaData);创建套接字SOCKETLiSten_sk;LiSten_sk=SoCket(AFlNET,SOCK,STREAM,IPPROTOTCP);if(LiSterVSk=INVALIDSOCKET)printf(zzFailedsocket!nz,);return0;)填充sockaddr_in结构sockaddrinsin;sin.sinfamiIy=AFINET;sin.sin_port=htons(4567);sin.sinaddr.Sun.SaClcIr=

21、INADDRANY;绑定这个套接字到一个本地地址if(bind(Listen_sk,(LPSOCKDDR)&sin,sizeof(Sin)=SoCKET_ERROR)(printf(z,Failedbind!nz,);return0;进入监听模式if(listen(Listen_sk,2)=SOCKET_ERROR)printf(Failedlisten!n,z);return0;)循环接受客户的连接请求sockaddr_inremoteAddr;intnAddrLen=sizeof(remoteAddr);SOCKETConnect_sk=socket(AF_INET,SOCK_STREAM

22、,IPPROTO_TCP);while(true)接受新连接Connect_sk-accept(Listen_sk,(sockaddr*)&remoteAddr,nAddrLen);if(ConnecLsk=INVALID-SOCKET)printf(Failedaccept!,z);continue;)Printf(接受到一个连接:%srnz,inet_ntoa(remoteAddr.sin_addr);接收数据charbuff500;intnRecv=recv(Connect_sk,buff,Strlen(buff),0);if(nRecvO)Printf(接收到数据:);for(inti

23、=O;inRecv;i+)printf%z,buffi);printfnzz);closesocket(Connect_sk);)关闭监听套接字closesocket(Listen_sk);WSACleanupO;return0;)(二)、客户端代码includeftincludeSpragmacomment(lib,ws2_32)intmain(void)SOCKETs;WSADATAwsaData;WSAStartup(MAKEWORD(2,2),&wsaData);创建套接字s二socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(s=INVALID_SO

24、CKET)Printf(创建套接字失败!n);return0;)填写远程地址信息sockaddr_inServAddr;servAddr.sin_family-AF_INET;servAddr.sin_port-htons(4567);servAddr.sin_addr.S_un.S_addr-inet_addr(,z127.O.O.1);if(connect(s,(sockaddr*)&servAddr,sizeof(servAddr)SOCKET_ERROR)Printf(连接失败!n);return0;elsePrintf(连接成功!n);发送数据charmessage500;memse

25、t(message,0,sizeof(message);Printf(请输入要传送的数据:);gets(message);if(message0!-0,)send(s,message,strlen(message),0);)关闭套接字*/closesocket(s);WSACleanupO;return0;)八、运行结果九、课程设计的总结体会在这段不长的时间里,我感触很深,也学到很多东西。我对WinSoCk双机通信有了更深的了解和认识,其原理和功能也加深了理解。TCP协议我们以前也学过相关知识,经过这次设计,相关的知识得到进一步巩固,运用也变得更加熟练。我学习和了解了有关ViSUalC+中的相

26、关知识和应用,对MiCrOSoftViSUalC+6.0集成开发环境也更加熟悉。通过这次课程设计,我不仅学习到了新的知识,也对以前学过的相关的知识有了更深入的理解和掌握。不仅加强了我的理论知识的学习,也增强了我的动手能力,对知识的理解不再局限于表明,理解更加透彻,也更巩固。以前的学习都是单一方面的知识,这次通过课程设计,将这三个方面的知识综合起来,显然难度是加大了。开始的时候我也感觉似乎无从下手。但在网上查找了相关资料,并且请教了一些同学后,有了一些头绪,并着手开始设计和实践。经过十几天的努力,任务终于圆满完成。我这次课程设计中,我得到了不少同学的指点和帮助,他们不厌其烦地给我讲解甚至是很简单的问题,也在我迷茫和困惑的时候,给我一两句话,让我幡然顿悟。我这次任务的完成也有你们的辛苦和功劳,无法在此一一道明,只有一并表示感谢。谢谢你们!十、参考文献网络与通信程序设计王艳平人民邮电出版社计算机网络软件编程指导书吴英清华大学出版社WINSOCK网络编程实用教程李凌清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号