TCPIP课设报告.docx
- 文档编号:17654479
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:19
- 大小:408.31KB
TCPIP课设报告.docx
《TCPIP课设报告.docx》由会员分享,可在线阅读,更多相关《TCPIP课设报告.docx(19页珍藏版)》请在冰豆网上搜索。
TCPIP课设报告
《TCP/IP原理与应用》课程设计报告书
课程设计名称:
局域网共享资源探测子系统设计与实现
所在院系:
计算机学院网络08
小组成员:
张云浩网络081200800824130
赵法宪网络081200800824113
陈俊超网络082200800824215
指导教师:
孙飞显夏冰
目录
目录…………………………………………………………………………2
一.设计题目……………………………………………………………………3
二.需求分析……………………………………………………………………3
三.概要设计……………………………………………………………………3
四.详细设计及调试运行结果分析……………………………………………5
4.1主对话框…………………………………………………………………5
4.2映射网络驱动器功能……………………………………………………5
4.3单个Ip共享资源搜索…………………………………………………8
4.4搜索所有计算机的共享资源……………………………………………9
4.5搜索结果保存为文本…………………………………………………13
4.5共享资源的主机和类项进行排序……………………………………15
五.附录………………………………………………………………………17
六.实验心得………………………………………………………………17
《TCP/IP原理与应用》课程设计报告书
一.设计题目:
局域网共享资源探测子系统设计与实现
二.需求分析:
总体需求:
效仿局域网查看器LanHelper,设计、实现并测试局域网共享资源探测子系统。
完成要求:
⏹搜索指定的某个计算机的共享资源
⏹搜索所有计算机的所有共享资源
⏹将某个指定的共享目录映射到本地磁盘(映射网络驱动器)
⏹将搜索到的共享资源列表导出到文本文件
⏹对搜索结果进行排序
三.概要设计:
1.开发平台:
MicrosoftVisualStudio2008
2.运行环境:
MicrosoftVisualXP
3.编程语言:
VC++
4.基本设计概念及处理流程:
(1)。
在本次设计中。
使用VC++语言进行编程,利用TCP/IP的基本的协议的工作原理和基本的编程知识,调用了API函数如NetShareEnum()函数获取特定IP主机的共享资源,WNetAddConnection()函数增加一个网络映射等
(2),在程序的编写过程中使用的VC++中的文件的输出来将查询后的结果输出并保存到TEXT文档中。
(3),在设计过程中,效仿局域网查看器LanHelper设计理念,但是没有采用软件的界面。
(4),程序的处理流程如下图所示:
四.详细设计及调试运行结果分析:
本程序在MicrosoftVisualStudio2008开发平台上使用VC++编写。
(1)。
主对话框如下:
说明:
默认的主机为本主机,127.0.0.1.
(2),映射网络驱动器功能实现;
对话框截图
映射网络驱动器,可将D盘映射到本主机驱动器Y上;执行映射后提示映射的结果:
映射后在我的电脑上结果如下:
执行断开映射后,映射断开,我的电脑显示如下:
实现代码如下:
{
UpdateData(FALSE);
DWORDnRetVal;
NETRESOURCEnr;
nr.dwType=RESOURCETYPE_ANY;
LPTSTRLocal=(LPTSTR)(LPCTSTR)m_strLocal;
nr.lpLocalName=T2W(Local);
LPTSTRTar=(LPTSTR)(LPCTSTR)m_strTar;
nr.lpRemoteName=T2W(Tar);
nr.lpProvider=NULL;
nRetVal=WNetAddConnection2(&nr,m_strPwd,m_strUser,FALSE);
if(nRetVal==NO_ERROR)
{CStringstrText;
strText.Format(CString("映射文件\'%s\'到网络驱动盘\'%s\'成功"),m_strTar,m_strLocal);
AfxMessageBox(strText);
return;
}
MessageBox(CString("映射网络驱动盘失败!
"));}
voidCMapDlg:
:
OnBnClickedButtonDismap()
{
DWORDnRetVal;
UpdateData(TRUE);
nRetVal=WNetCancelConnection2(m_strLocal,CONNECT_UPDATE_PROFILE,FALSE);
if(nRetVal==NO_ERROR)
{CStringstrText;
strText.Format(CString("断开网络驱动器映射\'%s\'成功!
"),m_strLocal);
MessageBox(strText);
return;}
MessageBox(CString("断开网络驱动器映射失败!
"));
}
(3)单个Ip共享资源搜索实现;
测试本主机的共享资源完成后如下:
测试网络特定主机后的共享资源完成后如下:
如果固定IP的主机没有共享资源,则提示:
(4)搜索所有计算机的共享资源实现;
在局域网网中搜索所有主机的共享资源
搜索结果如下:
实现代码如下:
voidCtmp1Dlg:
:
OnBnClickedOk()
{m_ListCtrlres.DeleteAllItems();
if(m_Operate==0)
{BYTEbIP[4];
m_IPtar.GetAddress(bIP[0],bIP[1],bIP[2],bIP[3]);
CStringtarAdd;tarAdd.Format(CString("%d.%d.%d.%d"),bIP[0],bIP[1],bIP[2],bIP[3]);Search(tarAdd);
}elseif(m_Operate==1)
{SearchAll();
}}
TCHAR*Ctmp1Dlg:
:
CString2TCHAR(CString&str)
{intiLen=str.GetLength();
TCHAR*szRs=newTCHAR[iLen];
lstrcpy(szRs,str.GetBuffer(iLen));
str.ReleaseBuffer();
returnszRs;
}voidCtmp1Dlg:
:
OnBnClickedRadioAll()
{GetDlgItem(IDC_IPADDRESS_TAR)->EnableWindow(0);
m_Operate=1;}
voidCtmp1Dlg:
:
OnBnClickedRadioPer()
{GetDlgItem(IDC_IPADDRESS_TAR)->EnableWindow
(1);
m_Operate=0;}
intCtmp1Dlg:
:
Search(CStringtarIP)
{TCHAR*tmp=CString2TCHAR(tarIP);
PSHARE_INFO_1BufPtr,p;
NET_API_STATUSres;
LPTSTRlpszServer=NULL;
DWORDer=0,tr=0,resume=0,i;
lpszServer=tmp;
do//begindo{
res=NetShareEnum(lpszServer,1,(LPBYTE*)&BufPtr,-1,&er,&tr,&resume);
if(res==ERROR_SUCCESS||res==ERROR_MORE_DATA){p=BufPtr;
for(i=0;i {CStringstrNetName=p->shi1_netname; CStringstrRemark=p->shi1_remark; DWORDdwType=p->shi1_type; CStringstrType; if(dwType==STYPE_DISKTREE) {strType=CString("硬盘驱动");} elseif(dwType==STYPE_PRINTQ) {strType=CString("打印机序列");} elseif(dwType==STYPE_DEVICE) {strType=CString("通信设备");} elseif(dwType==STYPE_IPC) {strType=CString("进程间通信(IPC)");} elseif(dwType==STYPE_SPECIAL) strType=CString("特殊共享");} elseif(dwType==STYPE_TEMPORARY) {strType=CString("临时共享")} else{strType.Format(CString("%d"),dwType); }intnCount=m_ListCtrlres.GetItemCount(); m_ListCtrlres.InsertItem(nCount,tarIP,0); m_ListCtrlres.SetItemText(nCount,1,strNetName); m_ListCtrlres.SetItemText(nCount,2,strRemark); m_ListCtrlres.SetItemText(nCount,3,strType); p++;}NetApiBufferFree(BufPtr);} elseif(res! =ERROR_SUCCESS&&res! =ERROR_MORE_DATA&&m_Operate==0){MessageBox(CString("没有共享信息! "));} }while(res==ERROR_MORE_DATA);//enddo return0; voidCtmp1Dlg: : SearchAll(void) {LPSERVER_INFO_101pBuf=NULL; LPSERVER_INFO_101pTmpBuf; DWORDdwLevel=101; DWORDdwPrefMaxLen=MAX_PREFERRED_LENGTH; DWORDdwEntriesRead=0; DWORDdwTotalEntries=0; DWORDdwServerType=SV_TYPE_SERVER;//allservers DWORDdwResumeHandle=0; NET_API_STATUSnStatus; LPTSTRpszServerName=NULL; LPTSTRpszDomainName=NULL; DWORDi; WSADATAwsaData; WSAStartup(MAKEWORD(2,0),&wsaData); nStatus=NetServerEnum(pszServerName, dwLevel, (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, dwServerType, pszDomainName, &dwResumeHandle); if((nStatus==NERR_Success)||(nStatus==ERROR_MORE_DATA)){ if((pTmpBuf=pBuf)! =NULL){ for(i=0;i CStringHostName=pTmpBuf->sv101_name; charszHostName[128]={'\0'}; inthostlength=HostName.GetLength(); for(intj=0;j {szHostName[j]=HostName[j];} hostent*ent=gethostbyname(szHostName); if(ent==NULL){ pTmpBuf++; continue;} CStringstrHostIP; in_addr*inHostIP=(in_addr*)ent->h_addr_list[0];strHostIP.Format(CString("%d.%d.%d.%d"),inHostIP->S_un.S_un_b.s_b1,inHostIP->S_un.S_un_b.s_b2,inHostIP->S_un.S_un_b.s_b3,inHostIP->S_un.S_un_b.s_b4);Search(strHostIP);pTmpBuf++; if(pBuf! =NULL)NetApiBufferFree(pBuf); WSACleanup(); } (5)将搜索结果保存为文本实现: 将TEXT文档保存在record。 text文档中,上图保存后的文档如下 实现代码如下: voidCtmp1Dlg: : OnBnClickedButton2() { //TODO: 在此添加控件通知处理程序代码 intnCount=m_ListCtrlres.GetItemCount(); CStringstrIpAdd; CStringstrNetName; CStringstrRemark; CStringstrType; CFilefile; file.Open(CString("Record.txt"),CFile: : modeCreate|CFile: : modeWrite); for(inti=0;i { strIpAdd=m_ListCtrlres.GetItemText(i,0); strNetName=m_ListCtrlres.GetItemText(i,1); strRemark=m_ListCtrlres.GetItemText(i,2); strType=m_ListCtrlres.GetItemText(i,3); CStringstr; str=_T("IP地址: ")+strIpAdd+_T("网络名称: ")+strNetName+_T("注释: ")+strRemark+_T("类型: ")+strType+_T("\r\n"); constunsignedcharLeadBytes[]={0xff,0xfe}; file.Write(LeadBytes,sizeof(LeadBytes)); file.Flush(); file.Write(str.GetBuffer(),str.GetLength()*sizeof(TCHAR)); file.Flush(); } file.Close(); } (5)依据共享资源的主机和类项进行排序实现: 按类型对上图的搜索结果排序如下: 按ip地址对上图的搜索结果排序如下: 实现代码如下: structDATA { intsubitem;//点击表头的列数 CListCtrl*plist;//listctrl的指针 boolfav; }; intCALLBACKCompareProc(LPARAMlParam1,LPARAMlParam2,LPARAMlParamSort) {DATA*pListCtrl=(DATA*)lParamSort; intcol=pListCtrl->subitem;//点击的列项传递给col,用来判断点击了第几列 CStringstrItem1=(pListCtrl->plist)->GetItemText(lParam1,col); CStringstrItem2=(pListCtrl->plist)->GetItemText(lParam2,col); intn1=strItem2.Compare(strItem1); if(pListCtrl->fav)//fav是用来判断是升序还是降序排列的函数 { returnn1; } else { n1=-n1; returnn1; } } voidCtmp1Dlg: : OnLvnColumnclickListRes(NMHDR*pNMHDR,LRESULT*pResult) { LPNMLISTVIEWpNMLV=reinterpret_cast //TODO: 在此添加控件通知处理程序代码 for(inti=0;i { m_ListCtrlres.SetItemData(i,i); } DATAdata; data.subitem=pNMLV->iSubItem;// data.plist=&m_ListCtrlres; if(fav%2==0) { data.fav=true; } elsedata.fav=false; fav++;//全局函数。 m_ListCtrlres.SortItems(CompareProc,(LPARAM)&data); *pResult=0; } 五.附录: 1.编程主要用到的的API函数简介: (1): NetShareEnum()函数: NetShareEnum()函数可以枚举目的IP的共享资源,其第一个参数的含义是目的资源的IP地址,第三个参数表示将要返回的共享资源的数据信息,第五个参数表示共享文件的数据信息的个数,调用该函数后应注意使用NetApiBufferFree()函数释放占用的资源。 (2): WNetAddConnection()函数 调用WNetAddConnection()函数可以增加一个网络映射,其第一个参数为NETRETERSESOURCE指针;第二个参数为密码第三个参数为用户名。 如果调用成功则返回NO_ERROR. 与该函数有相反的作用的函数是: WNetcancelConnection()函数,后者是取消一个网络映射,它的第一个参数表示要断开的网络驱动器名,如果第二个参数为0,表示建立的是永久链接,如果不是则建立的是临时连接。 第三个函数为TRUE时,则为强制性断开。 六.设计心得体会: 这次设计我们组的题目是: 局域网共享资源探测子系统设计与实现,在功能上仿照局域网查看器LanHelper,同时又按照需求,综合做出了这个课程设计。 在本次试验中,收获很多。 首先是知识上的收获。 在以前不了解WNetAddConnection()函数,WNetcancelConnection()函数等函数。 还有网络驱动器的相关知识(Windows系统提供了几种“映射网络驱动器”的方法,在命令行模式下,我们可以使用: “NETUSE\\计算机名\共享名\路径”。 除了使用命令来实现之外,还可以通过在“开始|网上邻居”点击右键,选择“映射网络驱动器”。 在弹出的窗口中,可以直接输入例如: “\\计算机名\共享路径”映射网络驱动器,也可以点击“浏览”来找到目前局域网中存在的共享内容)。 其次是合作能力,以前我们的课程设计都是每人一个题目,这一次是3个人做一个题目,虽然这样的题目在这么短的时间内要求完成,对我们来说是有一定的难度的。 但是还是通过分工合作完成了基本的要求的功能。 也让我们感受到了合作在程序开发上的重要性。 最后,感谢孙飞显老师和夏冰老师在程序编写的过程中的指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCPIP 课设报告 报告