湖南科技大学计算机网络课程设计报告.doc

上传人:jian****018 文档编号:9460365 上传时间:2020-04-05 格式:DOC 页数:9 大小:58.50KB
返回 下载 相关 举报
湖南科技大学计算机网络课程设计报告.doc_第1页
第1页 / 共9页
湖南科技大学计算机网络课程设计报告.doc_第2页
第2页 / 共9页
湖南科技大学计算机网络课程设计报告.doc_第3页
第3页 / 共9页
点击查看更多>>
资源描述
计算机网络课程设计报告姓名: 学号: 班级: 指导老师: 湖南科技大学计算机科学与工程学院2016年 1 月网络聊天程序的设计与实现一、 课程设计题目了解Socket通信的原理,在此基础上编写一个聊天程序。二、 课程设计内容1TCP/IP协议与WinSock网络编程接口的关系WinSock 并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把它当作一些协议的封装。现在的 WinSock已经基本上实现了与协议无关。你可以使用WinSock来调用多种协议的功能。那么,WinSock和TCP/IP协议到底是什么关系呢?实际上,WinSock就是TCP/IP协议的一种封装,你可以通过调用WinSock的接口函数来调用TCP/IP的各种功能.例如我想用TCP/IP 协议发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功能,至于具体怎么发送数据,WinSock已经帮你封装好了这种功能。2. WinSock编程简单流程WinSock编程分为服务器端和客户端两部分,TCP服务器端的大体流程如下:对于任何基于WinSock的编程首先必须要初始化WinSock DLL库。int WSAStarup( WORD wVersionRequested,LPWSADATA lpWsAData )。wVersionRequested是我们要求使用的WinSock的版本。调用这个接口函数可以初始化WinSock 。然后必须创建一个套接字(Socket)。SOCKET Socket(int af,int type,int protocol);套接字可以说是WinSock通讯的核心。WinSock通讯的所有数据传输,都是通过套接字来完成的,套接字包含了两个信息,一个是IP地址,一个是Port端口号,使用这两个信息,就可以确定网络中的任何一个通讯节点。当调用了Socket()接口函数创建了一个套接字后,必须把套接字与你需要进行通讯的地址建立联系,可以通过绑定函数bind来实现这种联系。int bind(SOCKET s,const struct sockaddr FAR* name,int namelen) ;struct sockaddr_inshort sin_family ;u_short sin_port;struct in_addr sin_addr ;char sin_sero8 ;就包含了需要建立连接的本地的地址,包括地址族、IP和端口信息。sin_family字段必须把它设为AF_INET,这是告诉WinSock使用的是IP地址族。sin_port就是要用来通讯的端口号。sin_addr就是要用来通讯的IP地址信息。在这里,必须还得提一下有关大头(big-endian)小头(little-endian)。因为各种不同的计算机处理数据时的方法是不一样的,Intel X86处理器上是用小头形式来表示多字节的编号,就是把低字节放在前面,把高字节放在后面,而互联网标准却正好相反,所以,必须把主机字节转换成网络字节的顺序。WinSock API提供了几个函数。把主机字节转化成网络字节的函数;u_long htonl(u_long hostlong);u_short htons(u_short hostshort);把网络字节转化成主机字节的函数;u_long ntohl(u_long netlong);u_short ntohs(u_short netshort) ;这样,设置IP地址和port端口时,就必须把主机字节转化成网络字节后,才能用Bind()函数来绑定套接字和地址。当绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。int listen(SOCKET s,int backlog);这个函数可以把套接字转成监听模式。如果客户端有了连接请求,我们还必须使用int accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen);来接受客户端的请求。现在基本上已经完成了一个服务器的建立,而客户端的建立的流程则是初始化WinSock,然后创建Socket套接字,再使用int connect(SOCKET s,const struct sockaddr FAR* name,int namelen) ;来连接服务端。计算机网络(第6版)295页图6-32所示的系统调用使用顺序:3VC中socket编程步骤服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket();2:绑定套接字到一个IP地址和一个端口上(bind();3:将套接字设置为监听模式等待连接请求(listen();4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept();5:用返回的套接字和客户端进行通信(send()/recv();6:返回,等待另一连接请求;7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。客户端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket();2:向服务器发出连接请求(connect();3:和服务器端进行通信(send()/recv();4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。三、 结果及结果分析服务器端:客服端:客户端发送hello,服务器端接收hello;然后服务器端发送hi,客户端接收hi。客户使用send发送请求,而服务器使用send发送回答。服务器使用recv接收客户用send调用发送的请求。客户在发完请求后用recv接收回答。在调试过程中,曾输出了“烫烫烫烫烫烫烫烫烫烫烫烫”。先将服务器端设为活动工程,再运行,然后将客户端设为活动工程,再运行,即可。由于程序的缺陷,当运行多个客户端时,多个客户端竞争与服务器端连接,仅能一个客户端与服务器端相连。基于IP多播的网络会议程序一、 课程设计题目设计一个图形界面的网络会议程序(实现文本多播方式即可)。二、 课程设计内容在局域网中,管理员常常需要将某条信息发送给一组用户。如果使用一对一的发送方法,虽然是可行的,但是过于麻烦,也常会出现漏发、错发。为了更有效的解决这种组通信问题,出现了一种多播技术(也常称为组播通信),它是基于IP层的通信技术。众所周知,普通IP通信是在一个发送者和一个接收者之间进行的,我们常把它称为点对点的通信,但对于有些应用,这种点对点的通信模式不能有效地满足实际应用的需求。广播也是一种实现一对多数据通信的模式,但广播与多播在实现方式上有所不同。广播是将数据从一个工作站发出,局域网内的其他所有工作站都能收到它。这一特征适用于无连接协议,因为LAN上的所有机器都可获得并处理广播消息。使用广播消息的不利之处是每台机器都必须对该消息进行处理。多播通信则不同,数据从一个工作站发出后,如果在其它LAN上的机器上面运行的进程表示对这些数据有兴趣,多播数据才会发给它们。编程步骤1、启动Visual C+6.0,创建一个控制台项目工程MultiCase。#define MCASTADDR 233.0.0.1 /多播组地址#define MCASTPORT 5150 /本地端口号Receiver项目实现步骤:(1)、创建一个SOCK_DGRAM类型的Socket。(2)、将此Socket绑定到本地的一个端口上,为了接收服务器端发送的多播数据。local.sin_family = AF_INET;local.sin_port = htons(MCASTPORT);local.sin_addr.s_addr = INADDR_ANY;if( bind(sock,(struct sockaddr*)&local,sizeof(local) = SOCKET_ERROR )printf( bind failed with:%d n,WSAGetLastError();closesocket(sock);WSACleanup();return -1; (3)、加入多播组。remote.sin_family = AF_INET;remote.sin_port = htons(MCASTPORT);remote.sin_addr.s_addr = inet_addr( MCASTADDR );mcast.imr_multiaddr.s_addr = inet_addr(MCASTADDR);mcast.imr_interface.s_addr = INADDR_ANY;if( setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mcast,sizeof(mcast) = SOCKET_ERROR) printf(setsockopt(IP_ADD_MEMBERSHIP) failed:%dn,WSAGetLastError(); closesocket(sockM); WSACleanup(); return -1;(4)、接收多播数据。Sender实现步骤:(1)、创建一个SOCK_DGRAM类型的Socket。(2)、加入多播组。remote.sin_family = AF_INET;remote.sin_port = htons(MCASTPORT);remote.sin_addr.s_addr = inet_addr( MCASTADDR );if( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote, sizeof(remote),NULL,NULL,NULL,NULL, JL_BOTH) = INVALID_SOCKET)printf(WSAJoinLeaf() failed:%dn,WSAGetLastError();closesocket(sock);WSACleanup();return -1;(3)、发送多播数据。2、编译两个项目,在局域网中按如下步骤测试:(1)、将Sender.exe拷贝到发送多播数据的上。(2)、将Receiver.exe拷贝到多个要求接收多播数据的上。(3)、各自运行相应的程序。(4)、在Sender PC上输入多播数据后,你就可以在Receiver PC上看到输入的多播数据。三、结果及结果分析Sender:Receiver:Sender与receiver只要绑定相同的多播组地址和端口号,sender就可以向多个receiver发送信息,receiver也可以接收多个sender发出的信息。在此只列出一个sender向receiver发送信息的情况。Tracert与Ping程序设计与实现一、 课程设计题目了解Tracert程序的实现原理,并调试通过。然后参考Tracert程序和教材4.4.2节,编写一个Ping程序,并能测试本局域网的所有机器是否在线,运行Ping程序。二、 课程设计内容实现原理Tracert程序关键是对IP头部生存时间(time to live)TTL字段的使用,程序实现时是向目地主机发送一个ICMP回显请求消息,初始时TTL等于1,这样当该数据报抵达途中的第一个路由器时,TTL的值就被减为0,导致发生超时错误,因此该路由生成一份ICMP超时差错报文返回给源主机。随后,主机将数据报的TTL值递增1,以便IP报能传送到下一个路由器,并由下一个路由器生成ICMP超时差错报文返回给源主机。不断重复这个过程,直到数据报达到最终的目地主机,此时目地主机将返回ICMP回显应答消息。这样,源主机只需对返回的每一份ICMP报文进行解析处理,就可以掌握数据报从源主机到达目地主机途中所经过的路由信息。三、 结果及结果分析Tracert程序结果:输出数据包往返时间及IP地址心得体会 通过本次的课程设计中对计算机程序实现的编写与对网络的某些功能的模拟,本应更好地理解并掌握计算机网络的基本工作原理和工作过程,以及更好地理解应用程序和操作系统之间传递控制权的机制。但是,由于对计算机网络的基本原理掌握得不好,及对C语言的生疏,不能很好地利用原理去分析代码、编写代码。因此,不能很好地达到本来的课程设计目的。不过也使我了解了套接字socket的创建和运用。要注重平时的知识积累,培养查阅技术文献、资料及手册的能力,多动手实践,提高实际编程能力和灵活运用所学知识解决问题的能力。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!