计算机网络应用设计实验报告_第1页
计算机网络应用设计实验报告_第2页
计算机网络应用设计实验报告_第3页
计算机网络应用设计实验报告_第4页
计算机网络应用设计实验报告_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉大学计算机学院课程实验(设计)报告 课程名称: 计算机网络应用设计专业、班: 姓 名: 学 号: 学 期: 2010年上学期 第二部分 软件设计一、实验内容完成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(afxgetappname(

3、),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 * pex)cstring m_i;m_i=连接n

4、o成功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服务器上的所有文件*/void cmfcftp3dlg:list()cstring m_i;cstring m_ii;c

5、stringarray 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();elsem_i=finder.getfilename()+rn;for (int j=0;jn;j+)m_ii=t;m_f

6、tpinfo=m_ftpinfo+m_ii;m_ftpinfo +=m_i;updatedata(false);finder.close();for(int i=0;im_dir.getsize();i+)n+;m_i=+m_dir.getat(i)+rn;for (int j=1;jsetcurrentdirectory(m_dir.getat(i);list();bool m_suc1=0;while(!m_suc1)m_suc1= m_pftpconnection-setcurrentdirectory(.);n-;2. pop3源程序说明:本程序是使用vc+编写,开发环境为vs2008

7、,这里只贴了与实现相关的代码,界面部分的代码不在此描述了。mypop3app.cpp 文件:bool cmypop3app:initinstance()initcommoncontrolsex initctrls;initctrls.dwsize = sizeof(initctrls);/ 将它设置为包括所有要在应用程序中使用的/ 公共控件类。initctrls.dwicc = icc_win95_classes;initcommoncontrolsex(&initctrls);cwinapp:initinstance();afxenablecontrolcontainer();setregi

8、strykey(_t(应用程序向导生成的本地应用程序);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.wvers

9、ion) != 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:exitinstance()/ todo

10、: 在此添加专用代码和/或调用基类wsacleanup();return cwinapp:exitinstance();/*/ 自定义的通过套接字发送数据函数*/int cmypop3dlg:send(socket& sock, tchar const * buf, int len, int flag)int bytes(0), count(0);while ( count len - 2 )return offset;rs = recv(m_sock, buf + offset, len - offset, flags);if ( rs 0 ) /* error occur */return

11、 -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 = strstr(p + 2, rn);if ( p = null )return sum;while (

12、(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 (int i = 0; i enablewindow(true);getdlgitem(idc_button2)-enablewindow(false);closeso

13、cket(m_sock);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_username.isempty()set

14、dlgitemtext(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(conntoserverthread, this);return;/*/ 点击注销按钮*/void cmypop3dl

15、g: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);/ 显示服务器返回的信息。m_cmdinfo += rnresponse to quit: ;m_cmdinfo += recvbu

16、f;setdlgitemtext(idc_edit6, m_cmdinfo);if (rt m_sock = socket(af_inet, sock_stream, 0); / 创建流式套接字。/ 获取pop3 服务器的ip地址。struct 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

17、 char)p-h_addr_list01, (unsigned char)p-h_addr_list02, (unsigned char)p-h_addr_list03);/ 创建一个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

18、-m_sock, (sockaddr*)&sockaddr, sizeof(sockaddr)pthis-setdlgitemtext(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 (returnvalsetdlgitemtext(idc_static_er

19、rorinfo, _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)/ 显示服务器传回来的信息setdlgitemtext(idc_edit6, m_cmdinfo);/ 更新界面

20、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, sizeof(sendbuf);memset(recvbuf, 0, sizeof(recvbuf);int rs(

21、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-loginfail();return 1;rs = recv(pthis-m_sock, recvbuf, sizeof(recvbuf), 0);/ 保存并显示服务器返回结果。pthis-m_cm

22、dinfo += _t(rnresponse to username: );pthis-m_cmdinfo += recvbuf;pthis-setdlgitemtext(idc_edit6, pthis-m_cmdinfo);if (rs 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);i

23、f (-1 = rs)pthis-setdlgitemtext(idc_static_errorinfo, _t(发送密码失败);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 setdlgitemt

24、ext(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;tchar sendbuf128;tchar recvbuf256;memset(sendbuf, 0, sizeof(sendbuf);memset(

25、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 += rnresponse to list: ;pthis-m_cmdinfo += recvbuf;pthis-setdlgitemtext(idc_edit6, pthis-m_cmdinfo);i

26、f ( rs setdlgitemtext(idc_static_errorinfo, _t(获取邮件信息失败);return 1;recvbufrs = 0;int sum = pthis-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

27、 i(1); i=sum; +i) / 注意,邮件编号从开始,不是从开始。fetchmail(i);return 0;/*/ 收取第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

28、 create(true);/ 发送retr 命令,获取某封邮件的内容。sprintf(sendbuf, retr %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 respo

29、nse to retr: ;m_letterinfo += recvbuf;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(

30、filename, recvbuf);strcat(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()/ todo: 在此添加消息处理程序代码

31、和/或调用默认值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.web.ui.htmlcontrol

32、s;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 system.collections;

33、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_load(object send

34、er, 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.geturlparmvalue(ur

35、lparmname.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.configuration;using system.collections

36、;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 void page_load(object sender, eventarg

37、s e) if (!ispostback) bindbookdetail(); webtool.savebookidincookies(bookid); booksvisited1.bindbooksvisited(webtool.getbookidincookies(); private string bookid get if (request.querystringbookid = null) return null; return request.querystringbookid.tostring(); private void bindbookdetail() if (string

38、.isnullorempty(bookid) return; dataset ds=new bookbll().selectbookbybookid(bookid); fvbookdetail.datasource = ds; fvbookdetail.databind(); if (ds = null | ds.tables0.rows.count = 0) lblmsg.visible = true; 4 showshoppingcart.aspx 购物车using system;using system.data;using system.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;u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论