《计算机网络》实验指导书苏志同李杰实验一IP子网划分(2学时)一、实验目的理解IP地址进行子网划分的原因和原理二、实验环境已安装好的PacketTracer软件中模拟不同网络段的通信。三、实验内容1、说明A类,B类,C类网络段的取值范围及默认的子网掩码和所所能容纳的最多电脑数目2、进行子网划分及子网掩码的设计,实现相同子网内的计算机可以通讯,在这里假如使用C类网络段,对10台PC终端进行IP设置,需要画出网络拓扑图并计算子网掩码(注意网络位),后进行验证3、进行子网划分及子网掩码的设计,实现不同子网内的计算机可以通讯,在这里假如使用C类网络段,对4台PC终端进行IP设置,需要画出网络拓扑图并计算子网掩码(注意网络位),后进行验证实验二Windows2008环境下的服务器配置(4学时)一、实验目的本实验是为了让学生学习DHCP(动态主机配置协议)、DNS(域名服务)、IIS、FTP服务的有关知识。二、实验环境1、运行Windows2008Server的计算机并且已经安装了DHCP、DNS、IIS;2、一台Win2008客户机;3、服务器和客户机之间可以正常网络连接,并可以正常联入Internet。三、实验内容1、配置DHCP能够自动为其他计算机分配IP地址和子网掩码;2、配置DNS服务器(1)打开服务管理器,点击角色,右击添加角色,点击下一步,勾选DNS服务器,点击下一步到完成。(2)创建正向搜索区域:正向搜索区域是将域名转化为IP地址的区域文件;☆安装完成-开始--管理工具--dns,打开。正向查找区域--右键--新建区域;☆在区域名中输入域名,如:stud.edu.cn;(3)配置DNS正向搜索区域主机记录:主机记录通过一个区域内的IP地址与主机名发生联系;☆右击正向搜索区域名,选择“新建主机”;☆在相应的对话框输入主机名称(、jxxx等)、IP地址,单击添加主机;(5)创建一个反向搜索区域并设置属性:反向搜索区域是指将IP地址转化为域名的区域文件;☆选择IP4,反向查询,填好反向查找区域IP段,下一步☆进入反向查找区域--刚才ip段里面--空白处右键--新建指针☆主机IP地址,就是dns服务器ip;主机名,游览--选择正向区域(6)验证DNS服务器是否配置成功☆dns管理器--启动nslookup--依次输入我们实验域名和ip地址,看下面信息是否匹配;3、配置IIS服务器(1)配置服务;(2)利用相应工具,建立个人的网站,将个人网站在Internet上发布;(3)配置FTP服务,同学之间能够实现文件传送功能。实验三基本Winsock编程(6学时)一、实验目的1、了解Winsock编程原理;2、熟悉Windows网络编程接口;二、实验环境VisualC或C、VB等。三、实验内容与要求编写一个简单的C/S通讯程序。具体要求:(1)使用WINSOCK通讯:WINSOCK是WindowsSocketsAPI的简称,已经成为Windows广泛应用的、开放的、支持多种协议、事实上的网络编程接口标准。(2)客户方程序与服务方程序位于两台不同的机器上,在客户方通过指定服务方的IP地址和端口号来通讯;(3)服务器程序,始终处于监听状态,具有连续接收客户发送的信息的能力(发送的信息任意)。四、聊天程序核心代码(可参考)1、服务器端代码开启服务器功能:voidOnServerOpen()//开启服务器功能{WSADATAwsaData;intiErrorCode;charchInfo[64];if(WSAStartup(WINSOCK_VERSION,&wsaData))//调用WindowsSocketsDLL{MessageBeep(MB_ICONSTOP);MessageBox(Winsock无法初始化!,AfxGetAppName(),MB_OK|MB_ICONSTOP);WSACleanup();return;}elseWSACleanup();if(gethostname(chInfo,sizeof(chInfo))){ReportWinsockErr(\n无法获取主机!\n);return;}CStringcsWinsockID=\n==服务器功能开启在端口:No.;csWinsockID+=itoa(m_pDoc-m_nServerPort,chInfo,10);csWinsockID+=\n;PrintString(csWinsockID);//在程序视图显示提示信息的函数,读者可自行创建m_pDoc-m_hServerSocket=socket(PF_INET,SOCK_STREAM,DEFAULT_PROTOCOL);//创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信if(m_pDoc-m_hServerSocket==INVALID_SOCKET){ReportWinsockErr(无法创建服务器socket!);return;}m_pDoc-m_sockServerAddr.sin_family=AF_INET;m_pDoc-m_sockServerAddr.sin_addr.s_addr=INADDR_ANY;m_pDoc-m_sockServerAddr.sin_port=htons(m_pDoc-m_nServerPort);if(bind(m_pDoc-m_hServerSocket,(LPSOCKADDR)&m_pDoc-m_sockServerAddr,sizeof(m_pDoc-m_sockServerAddr))==SOCKET_ERROR)//与选定的端口绑定{ReportWinsockErr(无法绑定服务器socket!);return;}iErrorCode=WSAAsyncSelect(m_pDoc-m_hServerSocket,m_hWnd,WM_SERVER_ACCEPT,FD_ACCEPT);//设定服务器相应的网络事件为FD_ACCEPT,即连接请求,//产生相应传递给窗口的消息为WM_SERVER_ACCEPTif(iErrorCode==SOCKET_ERROR){ReportWinsockErr(WSAAsyncSelect设定失败!);return;}if(listen(m_pDoc-m_hServerSocket,QUEUE_SIZE)==SOCKET_ERROR)//开始监听客户连接请求{ReportWinsockErr(服务器socket监听失败!);m_pParentMenu-EnableMenuItem(ID_SERVER_OPEN,MF_ENABLED);return;}m_bServerIsOpen=TRUE;//监视服务器是否打开的变量return;}响应客户发送聊天文字到服务器:ON_MESSAGE(WM_CLIENT_READ,OnClientRead)LRESULTOnClientRead(WPARAMwParam,LPARAMlParam){intiRead;intiBufferLength;intiEnd;intiRemainSpace;charchInBuffer[1024];inti;for(i=0;(iMAXCLIENT)&&(M_ACLIENTSOCKET[I]!=WPARAM);I++)//MAXClient是服务器可响应连接的最大数目{}if(i==MAXClient)return0L;iBufferLength=iRemainSpace=sizeof(chInBuffer);iEnd=0;iRemainSpace-=iEnd;iBytesRead=recv(m_aClientSocket[i],(LPSTR)(chInBuffer+iEnd),iSpaceRemaining,NO_FLAGS);//用可控缓冲接收函数recv()来接收字符iEnd+=iRead;if(iBytesRead==SOCKET_ERROR)ReportWinsockErr(recv出错!);chInBuffer[iEnd]='\0';if(lstrlen(chInBuffer)!=0){PrintString(chInBuffer);//服务器端文字显示OnServerBroadcast(chInBuffer);//自己编写的函数,向所有连接的客户广播这个客户的聊天文字}return(0L);}对于客户断开连接,会产生一个FD_CLOSE消息,只须相应地用closesocket()关闭相应的Socket即可,这个处理比较简单。2、客户端代码连接到服务器:voidOnSocketConnect(){WSADATAwsaData;DWORDdwIPAddr;SOCKADDR_INsockAddr;if(WSAStartup(WINSOCK_VERSION,&wsaData))//调用WindowsSocketsDLL{MessageBox(Winsock无法初始化!,NULL,MB_OK);return;}m_hSocket=socket(PF_INET,SOCK_STREAM,0);//创建面向连接的socketsockAddr.sin_family=AF_INET;//使用TCP/IP协议sockAddr.sin_port=m_iPort;//客户端指定的IP地址sockAddr.sin_addr.S_un.S_addr=dwIPAddr;intnConnect=connect(m_hSocket,(LPSOCKADDR)&sockAddr,sizeof(sockAddr));//请求连接if(nConnect)ReportWinsockErr(连接失败!);ElseMessageBox(连接成功!,NULL,MB_OK);intiErrorCode=WSAAsyncSelect(m_hSocket,m_hWnd,WM_SOCKET_READ,FD_READ);//指定响应的事件,为服务器发送来字符if(iErrorCode==SOCKET_ERROR)MessageBox(WSAAsyncSelect设定失败!);}