




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉大学计算机学院课程实验(设计)报告 课程名称: 计算机网络应用设计专业、班: 姓 名: 学 号: 学 期: 2010年上学期 0 / 33第二部分 软件设计一、实验内容完成FTP客户端、POP3客户端两个系统程序,以及一个应用程序。客户端操作系统为Windows XP。FTP程序要求具有图形化界面、上传、下载功能,鼓励实现断点续传功能,POP3程序具有邮件接收、阅读、删除等基本功能。FTP、POP3程序使用socket方式编程,从创建socket、建立TCP连接开始,实现FTP、SMTP、POP3协议的功能,不得调用第三方控件(可使用操作系统自身的API函数)。编程工具可以使用C#或VC+
2、。应用程序要求实现一个网上书店的基本功能,要求具有前端(用户)和后端(管理)功能,基于Web运行方式。前端具有浏览书目、购物车等功能,后端具有管理书目、基本统计功能。编程工具可以是MS .NET(C#)或者J2EE 二选一,数据库可以是SQL Server、DB2、Oracle、Mysql、PostgreSQL之一。二、实验步骤与实验结果1. FTP源程序说明:本程序使用VC+编写,开发环境为VS2008/*/ 连接FTP 服务器*/void Cmfcftp3Dlg:OnBnClickedButton1()m_pInetSession=new CInternetSession(AfxGetAp
3、pName(),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)CString m_i;m_i="连接成功rn"m_ftpinfo +=m_i;UpdateData(FALSE);List();catch (CInternetException * pE
4、x)CString m_i;m_i="连接no成功rn"m_ftpinfo +=m_i;UpdateData(FALSE);TCHAR szError1024;if ( pEx->GetErrorMessage(szError,1024) m_i=(CString) szError;m_ftpinfo +=m_i;UpdateData(FALSE);else AfxMessageBox("There was an exception");pEx->Delete();m_pFtpConnection=NULL;/*/ 列出FTP服务器上的所有文
5、件*/void Cmfcftp3Dlg:List()CString m_i;CString m_ii;CStringArray m_Dir;CFtpFileFind finder(m_pFtpConnection);BOOL bWorking=finder.FindFile(_T("*");while (bWorking)bWorking = finder.FindNextFile();if ( finder.IsDots() ) continue;if (finder.IsDirectory() / 如果是目录。 m_Dir.Add( finder.GetFileName
6、();elsem_i=finder.GetFileName()+"rn"for (int j=0;j<n;j+)m_ii="t"m_ftpinfo=m_ftpinfo+m_ii;m_ftpinfo +=m_i;UpdateData(FALSE);finder.Close();for(int i=0;i<m_Dir.GetSize();i+)n+;m_i=""+m_Dir.GetAt(i)+""+"rn"for (int j=1;j<n;j+)m_ii="t"
7、m_ftpinfo=m_ftpinfo+m_ii;m_ftpinfo +=m_i;UpdateData(FALSE);BOOL m_suc=0;while (!m_suc)m_suc=m_pFtpConnection->SetCurrentDirectory(m_Dir.GetAt(i);List();BOOL m_suc1=0;while(!m_suc1)m_suc1= m_pFtpConnection->SetCurrentDirectory(".");n-;2. POP3源程序说明:本程序是使用VC+编写,开发环境为VS2008,这里只贴了与实现相关的代码
8、,界面部分的代码不在此描述了。MyPop3App.cpp 文件:BOOL CMyPop3App:InitInstance()INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);/ 将它设置为包括所有要在应用程序中使用的/ 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp:InitInstance();AfxEnableControlContainer();SetRegistryKey(_T
9、("应用程序向导生成的本地应用程序");WORD wVersionRequested;wVersionRequested = MAKEWORD(1, 1);int err = WSAStartup(wVersionRequested, &wsaData); /The Windows Sockets WSAStartup function initiates use of Ws2_32.dll by a processif (err != 0)return FALSE;if (LOBYTE(wsaData.wVersion) != 1 | HIBYTE(wsaData
10、.wVersion) != 1)return FALSE;CMyPop3Dlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: 在此放置处理何时用/ “确定”来关闭对话框的代码else if (nResponse = IDCANCEL)/ TODO: 在此放置处理何时用/ “取消”来关闭对话框的代码/ 由于对话框已关闭,所以将返回FALSE 以便退出应用程序,/ 而不是启动应用程序的消息泵。return FALSE;int CMyPop3App:ExitInstan
11、ce()/ TODO: 在此添加专用代码和/或调用基类WSACleanup();return CWinApp:ExitInstance();/*/ 自定义的通过套接字发送数据函数*/int CMyPop3Dlg:Send(SOCKET& sock, TCHAR const * buf, int len, int flag)int bytes(0), count(0);while ( count < len ) / 循环执行send 函数,直至数据发送完毕为止。bytes = send(sock, buf + count, len - count, flag);if ( bytes
12、 = -1 | bytes = 0 )return -1;count += bytes; return count;/*/ 自定义的接收POP3 发送的数据的函数*/int CMyPop3Dlg:Pop3Recv(SOCKET& m_sock, TCHAR* buf, int len, int flags)int rs;int offset = 0;do if ( offset > len - 2 )return offset;rs = recv(m_sock, buf + offset, len - offset, flags);if ( rs < 0 ) /* erro
13、r occur */return -1;offset += rs;bufoffset = '0' while ( strstr(buf, "rn.rn") = (char*)NULL );return offset;/*/ 从服务器对LIST 命令的返回信息中,获取邮件总数*/int CMyPop3Dlg:getMailSum(TCHAR* responseToLIST)int sum = 0;TCHAR* p = strstr(responseToLIST, "rn");if ( p = NULL )return sum;p = str
14、str(p + 2, "rn");if ( p = NULL )return sum;while ( (p = strstr(p + 2, "rn") != NULL )sum+;return sum;/*/ 从服务器返回的邮件内容中抽取邮件标题*/bool CMyPop3Dlg:GetSubject(TCHAR* subject, TCHAR const * buf)TCHAR const * p = strstr(buf, "Subject: ");if ( p = NULL )return false;p = p + 9;for
15、 (int i = 0; i < 32; i+) if ( pi = 'r' | pi = 'n' ) subjecti = '0'break;subjecti = pi;return true;/*/ 登录失败时的善后处理(关闭套接字、禁用注销按钮、启用登录按钮)*/int CMyPop3Dlg:loginFail()GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);closesocket(m_soc
16、k);return 0;/*/ 点击登录按钮*/void CMyPop3Dlg:OnLogin()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);if (m_serverAddr.IsEmpty()SetDlgItemText(IDC_STATIC_ERRORINFO, _T("请填写Pop3 服务器地址");return;else if (m_portNo.IsEmpty()SetDlgItemText(IDC_STATIC_ERRORINFO, _T("请填写端口号");return;else if (m_userNam
17、e.IsEmpty()SetDlgItemText(IDC_STATIC_ERRORINFO, _T("请填写您的用户名");return;else if (m_passwd.IsEmpty()SetDlgItemText(IDC_STATIC_ERRORINFO, _T("请填写您的邮箱密码");return;GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);AfxBeginThread(connToServerT
18、hread, this);return;/*/ 点击注销按钮*/void CMyPop3Dlg:OnLogoff()/ TODO: 在此添加控件通知处理程序代码TCHAR sendbuf10, recvbuf128;memset(recvbuf, 0, sizeof(recvbuf);strcpy(sendbuf, "QUIT rn");/ 发送QUIT 消息,结束本次会话。send(m_sock, sendbuf, strlen(sendbuf), 0);int rt = recv(m_sock, recvbuf, sizeof(recvbuf), 0);/ 显示服务器返
19、回的信息。m_CmdInfo += "rnResponse to Quit: "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, "注销成功!");/*/
20、 点击收取邮件按钮*/void CMyPop3Dlg:OnReceiveLetters()/ TODO: 在此添加控件通知处理程序代码AfxBeginThread(recvLetterThread, this);return;/*/ 连接服务器线程*/UINT CMyPop3Dlg:connToServerThread(LPVOID lpVoid)CMyPop3Dlg* pthis = (CMyPop3Dlg *)lpVoid;pthis->m_sock = socket(AF_INET, SOCK_STREAM, 0); / 创建流式套接字。/ 获取pop3 服务器的IP地址。stru
21、ct hostent * p;if (p = gethostbyname(pthis->m_serverAddr) =NULL)pthis->loginFail();return 1;TCHAR serverIP100;sprintf(serverIP, "%u.%u.%u.%u", (unsigned char)p->h_addr_list00, (unsigned char)p->h_addr_list01, (unsigned char)p->h_addr_list02, (unsigned char)p->h_addr_list0
22、3);/ 创建一个SOCKADDR_INSOCKADDR_IN sockaddr;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(
23、IDC_STATIC_ERRORINFO, _T("连接服务器失败。输入是否有误?");pthis->loginFail();return 1;/ 检查服务器返回的信息。TCHAR buf128;memset(buf, 0, sizeof(buf);int returnval(0);returnval = recv(pthis->m_sock, buf, sizeof(buf), 0);if (returnval<=0 | strncmp(buf, "+OK", 3) != 0)pthis->SetDlgItemText(IDC_
24、STATIC_ERRORINFO, _T("连接服务器失败。");pthis->loginFail();return 1;/ 保存服务器传回来的信息。pthis->m_CmdInfo += "rnResponse to Conn: "pthis->m_CmdInfo += buf;pthis->SendMessage(WM_CONNSERVER_SUCX, 0, 0);/*/ 连接服务器成功的消息响应函数*/LRESULT CMyPop3Dlg:login(WPARAM wParam, LPARAM lParam)/ 显示服务器传
25、回来的信息SetDlgItemText(IDC_EDIT6, m_CmdInfo);/ 更新界面SetDlgItemText(IDC_STATIC_ERRORINFO, _T("连接服务器成功!");AfxBeginThread(loginThread, this); / 开启登录线程return 0;/*/ 登录线程*/UINT CMyPop3Dlg:loginThread(LPVOID lpVoid)CMyPop3Dlg* pthis = (CMyPop3Dlg*)lpVoid;TCHAR sendbuf128, recvbuf128;memset(sendbuf, 0
26、, sizeof(sendbuf);memset(recvbuf, 0, sizeof(recvbuf);int rs(0); / send 和recv 的返回值。/ 发送用户名sprintf(sendbuf, "USER %srn", pthis->m_userName);rs = Send(pthis->m_sock, sendbuf, strlen(sendbuf), 0);if (-1 = rs)pthis->SetDlgItemText(IDC_STATIC_ERRORINFO, _T("发送用户名失败");pthis->
27、;loginFail();return 1;rs = recv(pthis->m_sock, recvbuf, sizeof(recvbuf), 0);/ 保存并显示服务器返回结果。pthis->m_CmdInfo += _T("rnResponse to UserName: ");pthis->m_CmdInfo += recvbuf;pthis->SetDlgItemText(IDC_EDIT6, pthis->m_CmdInfo);if (rs <= 0 | strncmp(recvbuf, "+OK", 3)
28、!= 0)pthis->SetDlgItemText(IDC_STATIC_ERRORINFO, _T("用户名不正确");pthis->loginFail();return 1;/ 发送密码sprintf(sendbuf, "PASS %srn", pthis->m_passwd);rs = Send(pthis->m_sock, sendbuf, strlen(sendbuf), 0);if (-1 = rs)pthis->SetDlgItemText(IDC_STATIC_ERRORINFO, _T("发送密
29、码失败");pthis->loginFail();return 1;rs = recv(pthis->m_sock, recvbuf, sizeof(recvbuf), 0);/ 保存并显示服务器返回结果。pthis->m_CmdInfo += _T("rnResponse to Passwd: ");pthis->m_CmdInfo += recvbuf;pthis->SetDlgItemText(IDC_EDIT6, pthis->m_CmdInfo);if (rs <= 0 | strncmp(recvbuf, &q
30、uot;+OK", 3) != 0)pthis->SetDlgItemText(IDC_STATIC_ERRORINFO, _T("密码不正确");pthis->loginFail();return 1;pthis->SetDlgItemText(IDC_STATIC_ERRORINFO, _T("登录成功!");return 0;/*/ 收取邮件线程*/UINT CMyPop3Dlg:recvLetterThread(LPVOID lpVoid)CMyPop3Dlg* pthis = (CMyPop3Dlg*)lpVoid;
31、TCHAR sendbuf128;TCHAR recvbuf256;memset(sendbuf, 0, sizeof(sendbuf);memset(recvbuf, 0, sizeof(recvbuf);sprintf(sendbuf, "LIST rn");send(pthis->m_sock, sendbuf, strlen(sendbuf), 0);/ 发送LIST消息,以便获取邮件总数。int rs = Pop3Recv(pthis->m_sock, recvbuf, sizeof(recvbuf), 0);pthis->m_CmdInfo +
32、= "rnResponse to List: "pthis->m_CmdInfo += recvbuf;pthis->SetDlgItemText(IDC_EDIT6, pthis->m_CmdInfo);if ( rs <= 0 | strncmp(recvbuf, "+OK", 3) != 0 )pthis->SetDlgItemText(IDC_STATIC_ERRORINFO, _T("获取邮件信息失败");return 1;recvbufrs = '0'int sum = pth
33、is->getMailSum(recvbuf);pthis->showLetters(sum);return 0;/*/ 收取邮件并显示*/int CMyPop3Dlg:showLetters(int sum)if (0 >= sum)m_letterInfo = _T("您的邮箱当前没有新邮件");SetDlgItemText(IDC_EDIT5, m_letterInfo);return 0;elsefor (int i(1); i<=sum; +i) / 注意,邮件编号从开始,不是从开始。fetchMail(i);return 0;/*/ 收取
34、第sum 封邮件*/int CMyPop3Dlg:fetchMail(int sum)int rs;FILE* fp;unsigned int len;TCHAR filename32;TCHAR sendbuf128, recvbuf10240;memset(filename, 0, sizeof(filename);memset(sendbuf, 0, sizeof(sendbuf);memset(recvbuf, 0, sizeof(recvbuf);bool create(true);/ 发送RETR 命令,获取某封邮件的内容。sprintf(sendbuf, "RETR %
35、drn", sum);send(m_sock, sendbuf, strlen(sendbuf), 0);do /邮件可能非常大,以至于缓冲区放不下,这是就需要循环多次的recv/ 清空接收缓冲区。memset(recvbuf, 0, sizeof(recvbuf);/接收并显示邮件内容。rs = Pop3Recv(m_sock, recvbuf, sizeof(recvbuf)-1, 0); /长度必须减一,最后一个字符必须是0'。m_letterInfo += "rn Response to RETR: "m_letterInfo += recvbuf
36、;SetDlgItemText(IDC_EDIT5, m_letterInfo);if ( rs < 0 )SetDlgItemText(IDC_STATIC_ERRORINFO, _T("收取邮件出现错误");return 1;if (create) /循环第一次执行时获取邮件标题,创建文件并打开。直到循环结束才关闭文件。create = false; / 循环下次执行到这里时跳过。/获取邮件标题,以此标题作为eml 文件的文件名。memset(filename, 0, sizeof(filename);GetSubject(filename, recvbuf);s
37、trcat(filename, ".eml");if ( (fp = fopen(filename, "wb") = NULL )return 2;len = strlen(recvbuf)-1;if ( fwrite(recvbuf, 1, len, fp) != len ) fclose(fp);return 3;fflush(fp); while ( strstr(recvbuf, "rn.rn") = (char*)NULL );fclose(fp);return 0;void CMyPop3Dlg:OnClose()/ TO
38、DO: 在此添加消息处理程序代码和/或调用默认值closesocket(m_sock);CDialog:OnClose();3. 网上书店源程序1 Default.aspx 网站首页using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.We
39、b.UI.HtmlControls;using BookShopOnline.WebConfig;public partial class _Default :Page protected void Page_Load(object sender, EventArgs e) Header1.TxtKeyWord.Focus(); form1.DefaultButton = Header1.BtnSearch.UniqueID; 2 Login.aspx 登录页面using System;using System.Data;using System.Configuration;using Sys
40、tem.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using BookShopOnline.Bll;using BookShopOnline.Model;public partial class UserCenter_Login:Page protected void Page_
41、Load(object sender, EventArgs e) protected void SubmitClick(object sender, EventArgs e) User userLogined= new UserBll().CheckUserLogin(UserLogin1._UserName.Text, UserLogin1._UserPwd.Text, Role.RegisterUser); if (userLogined!=null) UserState.SetUserLogined(userLogined); string backUrl = PageHelper.Ge
42、tUrlParmValue(UrlParmName.BackUrl); if (string.IsNullOrEmpty(backUrl) Response.Redirect("/Default.aspx"); else Response.Redirect(backUrl); else UserLogin1._Msg.Text = "用户名或密码错误!请重试。" UserLogin1._UserPwd.Focus(); 3 ShowBookDetail.aspx 浏览书using System;using System.Data;using System
43、.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using BookShopOnline.Bll;public partial class ShowBookDetail : System.Web.UI.Page protected
44、 void Page_Load(object sender, EventArgs e) if (!IsPostBack) BindBookDetail(); WebTool.SaveBookIDInCookies(BookID); BooksVisited1.BindBooksVisited(WebTool.GetBookIDInCookies(); private string BookID get if (Request.QueryString"BookID" = null) return null; return Request.QueryString"BookID".ToString(); private void BindBookDetail() if (string.IsNullOrEmpty(BookID) return; DataSet ds=new BookBll().SelectBookByBookID(BookID); fvBookDetail.DataSource = ds; fvBookDetail.DataBind(); if (ds = null | ds.Tables0.Rows.Cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实验室设备管理系统实验报告1
- 中国多路换向阀行业市场全景分析及投资前景展望报告
- 2024-2025学年高中物理第四章电磁感应第4节法拉第电磁感应定律练习含解析新人教版选修3-2
- 2025年泡沫包装制品项目可行性研究报告
- 2025年翔片管散热器行业深度研究分析报告
- 2025年防水漆项目评估报告
- 2025年中国缩合葡萄糖市场竞争格局及投资战略规划报告
- 中国西班牙传统木扇项目投资可行性研究报告
- 2025年麦芽糖项目可行性研究报告
- 2024河南饮料及茶叶零售市场前景及投资研究报告
- 智慧教育 云平台建设方案
- 精雕JDPaint快捷键大全
- 灯泡贯流式机组基本知识培训ppt课件
- 小学数学四年级下册培优补差记录
- 人教版三年级下册体育与健康教案(全册教学设计)
- DB61∕T 5006-2021 人民防空工程标识标准
- 土壤学习题与答案
- 产品结构设计(课堂PPT)
- 第九课_静止的生命
- 尖尖的东西我不碰(课堂PPT)
- 工程勘察和设计承揽业务的范围
评论
0/150
提交评论