计算机网络应用设计实验报告.docx
- 文档编号:16916569
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:47
- 大小:25.12KB
计算机网络应用设计实验报告.docx
《计算机网络应用设计实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络应用设计实验报告.docx(47页珍藏版)》请在冰豆网上搜索。
计算机网络应用设计实验报告
武汉大学计算机学院
课程实验(设计)报告
课程名称:
计算机网络应用设计
专业、班:
姓名:
学号:
学期:
2010年上学期
第二部分软件设计
一、实验内容
完成FTP客户端、POP3客户端两个系统程序,以及一个应用程序。
客户端操作系统为WindowsXP。
FTP程序要求具有图形化界面、上传、下载功能,鼓励实现断点续传功能,POP3程序具有邮件接收、阅读、删除等基本功能。
FTP、POP3程序使用socket方式编程,从创建socket、建立TCP连接开始,实现FTP、SMTP、POP3协议的功能,不得调用第三方控件(可使用操作系统自身的API函数)。
编程工具可以使用C#或VC++。
应用程序要求实现一个网上书店的基本功能,要求具有前端(用户)和后端(管理)功能,基于Web运行方式。
前端具有浏览书目、购物车等功能,后端具有管理书目、基本统计功能。
编程工具可以是MS.NET(C#)或者J2EE二选一,数据库可以是SQLServer、DB2、Oracle、Mysql、PostgreSQL之一。
二、实验步骤与实验结果
1.FTP源程序
说明:
本程序使用VC++编写,开发环境为VS2008
/******************************************************************************
//连接FTP服务器
******************************************************************************/
voidCmfcftp3Dlg:
:
OnBnClickedButton1()
{
m_pInetSession=newCInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);
UpdateData(TRUE);
try
{
//根据给出的参数连接到FTP服务器
m_pFtpConnection=m_pInetSession->GetFtpConnection(m_host,m_username,m_password,m_port);
if(m_pFtpConnection!
=NULL)
{
CStringm_i;
m_i="连接成功\r\n";
m_ftpinfo+=m_i;
UpdateData(FALSE);
List();
}
}
catch(CInternetException*pEx)
{
CStringm_i;
m_i="连接no成功\r\n";
m_ftpinfo+=m_i;
UpdateData(FALSE);
TCHARszError[1024];
if(pEx->GetErrorMessage(szError,1024))
{
m_i=(CString)szError;
m_ftpinfo+=m_i;
UpdateData(FALSE);
}
else
AfxMessageBox("Therewasanexception");
pEx->Delete();
m_pFtpConnection=NULL;
}
}
/*********************************************************************
//列出FTP服务器上的所有文件
****************************************************************************/
voidCmfcftp3Dlg:
:
List()
{
CStringm_i;
CStringm_ii;
CStringArraym_Dir;
CFtpFileFindfinder(m_pFtpConnection);
BOOLbWorking=finder.FindFile(_T("*"));
while(bWorking)
{
bWorking=finder.FindNextFile();
if(finder.IsDots())
continue;
if(finder.IsDirectory())//如果是目录。
{
m_Dir.Add(finder.GetFileName());
}
else
{
m_i=finder.GetFileName()+"\r\n";
for(intj=0;j { m_ii="\t"; m_ftpinfo=m_ftpinfo+m_ii; } m_ftpinfo+=m_i; UpdateData(FALSE); } } finder.Close(); for(inti=0;i { n++; m_i="["+m_Dir.GetAt(i)+"]"+"\r\n"; for(intj=1;j { m_ii="\t"; m_ftpinfo=m_ftpinfo+m_ii; } m_ftpinfo+=m_i; UpdateData(FALSE); BOOLm_suc=0; while(! m_suc) { m_suc=m_pFtpConnection->SetCurrentDirectory(m_Dir.GetAt(i)); } List(); BOOLm_suc1=0; while(! m_suc1) { m_suc1=m_pFtpConnection->SetCurrentDirectory(".."); } n--; } } 2.POP3源程序 说明: 本程序是使用VC++编写,开发环境为VS2008,这里只贴了与实现相关的代码,界面部分的代码不在此描述了。 MyPop3App.cpp文件: BOOLCMyPop3App: : InitInstance() { INITCOMMONCONTROLSEXInitCtrls; InitCtrls.dwSize=sizeof(InitCtrls); //将它设置为包括所有要在应用程序中使用的 //公共控件类。 InitCtrls.dwICC=ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp: : InitInstance(); AfxEnableControlContainer(); SetRegistryKey(_T("应用程序向导生成的本地应用程序")); WORDwVersionRequested; wVersionRequested=MAKEWORD(1,1); interr=WSAStartup(wVersionRequested,&wsaData);//TheWindowsSocketsWSAStartupfunctioninitiatesuseofWs2_32.dllbyaprocess if(err! =0) returnFALSE; if(LOBYTE(wsaData.wVersion)! =1||HIBYTE(wsaData.wVersion)! =1) returnFALSE; CMyPop3Dlgdlg; m_pMainWnd=&dlg; INT_PTRnResponse=dlg.DoModal(); if(nResponse==IDOK) { //TODO: 在此放置处理何时用 //“确定”来关闭对话框的代码 } elseif(nResponse==IDCANCEL) { //TODO: 在此放置处理何时用 //“取消”来关闭对话框的代码 } //由于对话框已关闭,所以将返回FALSE以便退出应用程序, //而不是启动应用程序的消息泵。 returnFALSE; } intCMyPop3App: : ExitInstance() { //TODO: 在此添加专用代码和/或调用基类 WSACleanup(); returnCWinApp: : ExitInstance(); } /********************************************************************** //自定义的通过套接字发送数据函数 *************************************************************************/ intCMyPop3Dlg: : Send(SOCKET&sock,TCHARconst*buf,intlen,intflag) { intbytes(0),count(0); while(count { bytes=send(sock,buf+count,len-count,flag); if(bytes==-1||bytes==0) return-1; count+=bytes; } returncount; } /****************************************************************************** //自定义的接收POP3发送的数据的函数 ******************************************************************************/ intCMyPop3Dlg: : Pop3Recv(SOCKET&m_sock,TCHAR*buf,intlen,intflags) { intrs; intoffset=0; do { if(offset>len-2) returnoffset; rs=recv(m_sock,buf+offset,len-offset,flags); if(rs<0)/*erroroccur*/ return-1; offset+=rs; buf[offset]='\0'; }while(strstr(buf,"\r\n.\r\n")==(char*)NULL); returnoffset; } /****************************************************************************** //从服务器对LIST命令的返回信息中,获取邮件总数 ******************************************************************************/ intCMyPop3Dlg: : getMailSum(TCHAR*responseToLIST) { intsum=0; TCHAR*p=strstr(responseToLIST,"\r\n"); if(p==NULL) returnsum; p=strstr(p+2,"\r\n"); if(p==NULL) returnsum; while((p=strstr(p+2,"\r\n"))! =NULL) sum++; returnsum; } /****************************************************************************** //从服务器返回的邮件内容中抽取邮件标题 ***********************************************************************************/ boolCMyPop3Dlg: : GetSubject(TCHAR*subject,TCHARconst*buf) { TCHARconst*p=strstr(buf,"Subject: "); if(p==NULL) returnfalse; p=p+9; for(inti=0;i<32;i++) { if(p[i]=='\r'||p[i]=='\n') { subject[i]='\0'; break; } subject[i]=p[i]; } returntrue; } /****************************************************************************** //登录失败时的善后处理(关闭套接字、禁用注销按钮、启用登录按钮) ******************************************************************************/ intCMyPop3Dlg: : loginFail() { GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); closesocket(m_sock); return0; } /****************************************************************************** //点击登录按钮 ******************************************************************************/ voidCMyPop3Dlg: : OnLogin() { //TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if(m_serverAddr.IsEmpty()) { SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写Pop3服务器地址")); return; } elseif(m_portNo.IsEmpty()) { SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写端口号")); return; } elseif(m_userName.IsEmpty()) { SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写您的用户名")); return; } elseif(m_passwd.IsEmpty()) { SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写您的邮箱密码")); return; } GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); AfxBeginThread(connToServerThread,this); return; } /****************************************************************************** //点击注销按钮 ******************************************************************************/ voidCMyPop3Dlg: : OnLogoff() { //TODO: 在此添加控件通知处理程序代码 TCHARsendbuf[10],recvbuf[128]; memset(recvbuf,0,sizeof(recvbuf)); strcpy(sendbuf,"QUIT\r\n"); //发送QUIT消息,结束本次会话。 send(m_sock,sendbuf,strlen(sendbuf),0); intrt=recv(m_sock,recvbuf,sizeof(recvbuf),0); //显示服务器返回的信息。 m_CmdInfo+="\r\nResponsetoQuit: "; m_CmdInfo+=recvbuf; SetDlgItemText(IDC_EDIT6,m_CmdInfo); if(rt<=0||strncmp(recvbuf,"+OK",3)! =0) { SetDlgItemText(IDC_STATIC_ERRORINFO,"注销失败! "); return; } loginFail(); SetDlgItemText(IDC_STATIC_ERRORINFO,"注销成功! "); } /****************************************************************************** //点击收取邮件按钮 ******************************************************************************/ voidCMyPop3Dlg: : OnReceiveLetters() { //TODO: 在此添加控件通知处理程序代码 AfxBeginThread(recvLetterThread,this); return; } /****************************************************************************** //连接服务器线程 ******************************************************************************/ UINTCMyPop3Dlg: : connToServerThread(LPVOIDlpVoid) { CMyPop3Dlg*pthis=(CMyPop3Dlg*)lpVoid; pthis->m_sock=socket(AF_INET,SOCK_STREAM,0);//创建流式套接字。 //获取pop3服务器的IP地址。 structhostent*p; if((p=gethostbyname(pthis->m_serverAddr))==NULL) { pthis->loginFail(); return1; } TCHARserverIP[100]; sprintf(serverIP,"%u.%u.%u.%u", (unsignedchar)p->h_addr_list[0][0], (unsignedchar)p->h_addr_list[0][1], (unsignedchar)p->h_addr_list[0][2], (unsignedchar)p->h_addr_list[0][3]); //创建一个SOCKADDR_IN SOCKADDR_INsockaddr; sockaddr.sin_family=AF_INET; sockaddr.sin_port=htons(atoi((LPCSTR)(LPCTSTR)pthis->m_portNo)); sockaddr.sin_addr.S_un.S_addr=inet_addr(serverIP); //连接到服务器 if(0! =connect(pthis->m_sock,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR))) { pthis->SetDlgItemText(IDC_STATIC_ERRORINFO,_T("连接服务器失败。 输入是否有误? ")); pthis->loginFail(); return1; } //检查服务器返回的信息。 TCHARbuf[128]; memset(buf,0,sizeof(buf)); intreturnval(0); returnval=recv(pthis->m_sock,buf,sizeof(buf),0); if(returnval<=0||strncmp(buf,"+OK",3)! =0) { pthis->SetDlgItemText(IDC_STATIC_ERRORINFO,_T("连接服务器失败。 ")); pthis->loginFail(); return1; } //保存服务器传回来的信息。 pthis->m_CmdInfo+="\r\nResponsetoConn: "; pthis->m_CmdInfo+=buf; pthis->SendMessage(WM_CONNSERVER_SUCX,0,0); } /**************************************************************************** //连接服务器成功的消息响应函数 ******************************************************************************/ LRESULTCMyPop3Dlg: : login(WPARAMwParam,LPARAMlParam) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 应用 设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)