网络编程技术实验指导书

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1网络编程技术实验指导书李笑平编淮阴工学院计算机工程学院2010年1月2目录实验1:基于NetBIOS的网络通信程序设计...............................................................................1实验2:基于socket的简单网络程序设计....................................................................................2实验3:流式套接字程序设计......................................................................................................10实验4:数据报式套接字程序设计..............................................................................................12实验5:原始套接字程序设计......................................................................................................15实验6:基于WinPcap的程序开发.............................................................................................18实验7:基于CAsyncSocket类网络通信程序设计....................................................................341实验1:基于NetBIOS的网络通信程序设计1实验目的与要求掌握NetBIOS方式的网络编程模式。理解并能应用NetBIOS实现C/S会话通信程序设计。2实验设备与实验环境连接到互联网上的IBMPC机两台。计算机硬件要求:IntelPentium5处理器、256MB以上内存,Ethernet网卡,网线若干。计算机软件要求:MSWindows9x/2000/XP操作系统,TCP/IP协议,Visualc++6.0/.net系统。3实验内容与步骤利用NetBIOS编写C/S会话通信程序以实现如下程序设计要求,客户端与服务器建立会话连接之后,客户端向服务器发送一个简单的四则算式(只含一个算符),服务器收到这个算式后,对其进行计算,并将计算结果回送给客户端,客户端将计算结果显示出来。注意:整个程序执行过程要求是基于NetBIOS命令实现的。程序的详细设计过程可参考教材。实践题1)在完成上面这个实验的基础上,将服务器和客户端分别放在两台不同的机器上进行测试。2)在以上程序的基础上进行改进,使服务器能提供对复杂四则算式的求值服务。即客户端发送一个复杂的四则算式,服务器收到此算式后对其求值并将结果回送给客户端。4实验小结1)要求理解掌握NetBIOS的工作原理。5实验报告本次交实验报告,内容包括:1实验目的与要求;2实验设备与实验环境;3实验内容与实验步骤(实验步骤、源代码);4实验心得(可以是实验总结、难点讨论、意见建议等)。2实验2:基于socket的简单网络程序设计1实验目的与要求:初步掌握TCP和UDP方式的网络编程模式。能运用Winsock提供的API函数接口进行网络程序的编写。2实验设备与实验环境:连接到互联网上的IBMPC机两台。计算机硬件要求:IntelPentium5处理器、256MB以上内存,Ethernet网卡,网线若干。计算机软件要求:MSWindows9x/2000/XP操作系统,TCP/IP协议,Visualc++6.0/.net系统。3实验内容与步骤:3.1工程的创建在VC6里边新建一个工程,选择:Win32ConsoleApplication,输入工程名。具体方法:启动VC6.0,进入【文件】-【新建】,然后在【新建工程】的对话框中选择:Win32ConsoleApplication,输入一个工程名及保存路径,点击【确定】,如图1、图2所示图13图23.2Winsock的初始化图3图44在Windows环境下进行网络程序设计时,所有的Winsock函数都是从ws2_32.dll导出的,我们可以通过#pragmacomment(lib,ws2_32.lib)语句链接到该库文件。但在使用Winsock函数之前还必须调用WSAStartup函数对库资源进行初始化工作,使用完毕后,在退出程序之前,我们还必须调用WSACleanup函数来释放库资源。为了便于程序的设计,我们先设计一个CInitSock类来管理WinSock库。在工程中添加新类的过程步骤如下:1)在VC6.0环境中点击【insert】-【newaclass】菜单,如图3所示;2)在弹出的对话框中,我们选定classtype为GenericClass,在Name输入框中输入类的名称CInitSock,然后点击确定即可,具体如图4所示。我们在InitSock.h和InitSock.cpp添加代码,详细代码如下所示。//////////////////////////////////////////////////////////////////////////////initSock.h//////////////////////////////////////////////////////////////////////////////#if!defined(AFX_INITSOCK_H__70EFFE09_9598_4C98_A067_29100702ACE8__INCLUDED_)#defineAFX_INITSOCK_H__70EFFE09_9598_4C98_A067_29100702ACE8__INCLUDED_#if_MSC_VER1000#pragmaonce#endif//_MSC_VER1000#pragmacomment(lib,ws2_32.lib)#includewinsock2.hclassCInitSock{public:CInitSock();virtual~CInitSock();};#endif//!defined(AFX_INITSOCK_H__70EFFE09_9598_4C98_A067_29100702ACE8__INCLUDED_)////////////////////////////////////////////////////////////////////////InitSock.cpp:implementationoftheCInitSockclass.////////////////////////////////////////////////////////////////////////#includeInitSock.h////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////5CInitSock::CInitSock(){WSADATAwsaData;WORDsockVersion=MAKEWORD(2,2);if(::WSAStartup(sockVersion,&wsaData)!=0)exit(0);}CInitSock::~CInitSock(){::WSACleanup();}然后我们在工程中新建一个.cpp的源文件,在这个源文件中填写我们的main()主函数代码(代码逻辑见后续小节),并且在我们的.cpp源文件的开始部分包含如下头文件:”initSock.h”和”stdio.h”,还申明一个CInitSock类对象,具体代码可如下所示:#includeInitSock.h#includestdio.hCInitSockinitSock;//初始化Winsock库3.3基于TCP的编程模式服务器端:函数具体说明请参考MSDN或者讲义或者教材。1)创建socketSocket函数的原型为:SOCKETsocket(intfamily,inttype,intprotocol);创建一个流式套接字可以如下所示:SOCKET_socket=socket(AF_INET,SOCK_STREAM,0);创建一个数据报式套接字可以如下所示:SOCKET_socket=socket(AF_INET,SOCK_DGRAM,0);在面向TCP的应用中我们应该创建一个流式套接字。2)绑定bindbind函数的原型:intbind(SOCKETsockfd,conststructsockaddr*myaddr,socklen_taddrlen)绑定是将一个套接字和一个套接字地址绑定在一起,在调用bind之前还必须设定服务器地址。如下可以设定一个服务器地址:structsockaddr_in_sockaddr_in;//定义地址结构体_sockaddr_in.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//服务器地址取本机任何可用的IP地址6_sockaddr_in.sin_family=AF_INET;_sockaddr_inv.sin_port=htons(6000);//服务器端口使用6000下面的语句将套接字和地址addrSrv绑定在一起:bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));htonl=hosttonetworklong,就是把主机的字节顺序转化成网络上的字节顺序,参数为longint型;同理htons=hosttonetworkshort,只不过参数为shortint型。地址族必须为AF_INET,端口为6000,INADDR_ANY表示可以用本机的任何IP地址。bind命令绑定本地刚才创建好的socket。格式如上。3)监听listenlisten函数的原型为:intlisten(SOCKETsockfd,intqueue_length);如下语句可以对一个套接字sockSrv进行监听:listen(sockSrv,5);4)接受连接accept,接收/发送数据send/recvstructsockaddr_inaddrClient;intlen=sizeof(SOCKADDR);charsendBuf[]=“TCPServerDemo!\r\n”;while(1){SOCKETsockConnect=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//接受客户端连接if(sockConnect==INVALD_SOCKET){printf(“Failedaccept!”);continue;}printf(接受到一个连接:%s,inet_ntoa(addrClient.sin_addr));//显示客户端的IPsend(sockConnect,sendBuf,strlen(sendBuf)+1,0);//关闭连接套接字,终止通信closesocket(sockConnect);}inet_ntoa函数转换Internet网络地址为点分十进制格式。5)关闭监听套接字,终止服务器closesocket(sockSrv);客户端:1)创建连接套接字7SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);2)设置通信地址structsockadd

1 / 51
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功