計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、武漢大學(xué)計(jì)算機(jī)學(xué)院課程實(shí)驗(yàn)(設(shè)計(jì))報(bào)告 課程名稱(chēng): 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)專(zhuān)業(yè)、班: 姓 名: 學(xué) 號(hào): 學(xué) 期: 2010年上學(xué)期 第二部分 軟件設(shè)計(jì)一、實(shí)驗(yàn)內(nèi)容完成ftp客戶(hù)端、pop3客戶(hù)端兩個(gè)系統(tǒng)程序,以及一個(gè)應(yīng)用程序??蛻?hù)端操作系統(tǒng)為windows xp。ftp程序要求具有圖形化界面、上傳、下載功能,鼓勵(lì)實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能,pop3程序具有郵件接收、閱讀、刪除等基本功能。ftp、pop3程序使用socket方式編程,從創(chuàng)建socket、建立tcp連接開(kāi)始,實(shí)現(xiàn)ftp、smtp、pop3協(xié)議的功能,不得調(diào)用第三方控件(可使用操作系統(tǒng)自身的api函數(shù))。編程工具可以使用c#或vc+。應(yīng)用程序要

2、求實(shí)現(xiàn)一個(gè)網(wǎng)上書(shū)店的基本功能,要求具有前端(用戶(hù))和后端(管理)功能,基于web運(yùn)行方式。前端具有瀏覽書(shū)目、購(gòu)物車(chē)等功能,后端具有管理書(shū)目、基本統(tǒng)計(jì)功能。編程工具可以是ms .net(c#)或者j2ee 二選一,數(shù)據(jù)庫(kù)可以是sql server、db2、oracle、mysql、postgresql之一。二、實(shí)驗(yàn)步驟與實(shí)驗(yàn)結(jié)果1. ftp源程序說(shuō)明:本程序使用vc+編寫(xiě),開(kāi)發(fā)環(huán)境為vs2008/*/ 連接ftp 服務(wù)器*/void cmfcftp3dlg:onbnclickedbutton1()m_pinetsession=new cinternetsession(afxgetappname(

3、),1,pre_config_internet_access);updatedata(true);try /根據(jù)給出的參數(shù)連接到ftp服務(wù)器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服務(wù)器上的所有文件*/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源程序說(shuō)明:本程序是使用vc+編寫(xiě),開(kāi)發(fā)環(huán)境為vs2008

7、,這里只貼了與實(shí)現(xiàn)相關(guān)的代碼,界面部分的代碼不在此描述了。mypop3app.cpp 文件:bool cmypop3app:initinstance()initcommoncontrolsex initctrls;initctrls.dwsize = sizeof(initctrls);/ 將它設(shè)置為包括所有要在應(yīng)用程序中使用的/ 公共控件類(lèi)。initctrls.dwicc = icc_win95_classes;initcommoncontrolsex(&initctrls);cwinapp:initinstance();afxenablecontrolcontainer();setregi

8、strykey(_t(應(yīng)用程序向?qū)傻谋镜貞?yīng)用程序);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: 在此放置處理何時(shí)用/ “確定”來(lái)關(guān)閉對(duì)話框的代碼else if (nresponse = idcancel)/ todo: 在此放置處理何時(shí)用/ “取消”來(lái)關(guān)閉對(duì)話框的代碼/ 由于對(duì)話框已關(guān)閉,所以將返回false 以便退出應(yīng)用程序,/ 而不是啟動(dòng)應(yīng)用程序的消息泵。return false;int cmypop3app:exitinstance()/ todo

10、: 在此添加專(zhuān)用代碼和/或調(diào)用基類(lèi)wsacleanup();return cwinapp:exitinstance();/*/ 自定義的通過(guò)套接字發(fā)送數(shù)據(jù)函數(shù)*/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;/*/ 從服務(wù)器對(duì)list 命令的返回信息中,獲取郵件總數(shù)*/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;/*/ 從服務(wù)器返回的郵件內(nèi)容中抽取郵件標(biāo)題*/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;/*/ 點(diǎn)擊登錄按鈕*/void cmypop3dlg:onlogin()/ todo: 在此添加控件通知處理程序代碼updatedata(true);if (m_serveraddr.isempty()setdlgitemtext(idc_static_errorinfo, _t(請(qǐng)?zhí)顚?xiě)pop3 服務(wù)器地址);return;else if (m_portno.isempty()setdlgitemtext(idc_static_errorinfo, _t(請(qǐng)?zhí)顚?xiě)端口號(hào));return;else if (m_username.isempty()set

14、dlgitemtext(idc_static_errorinfo, _t(請(qǐng)?zhí)顚?xiě)您的用戶(hù)名);return;else if (m_passwd.isempty()setdlgitemtext(idc_static_errorinfo, _t(請(qǐng)?zhí)顚?xiě)您的郵箱密碼);return;getdlgitem(idc_button1)-enablewindow(false);getdlgitem(idc_button2)-enablewindow(true);afxbeginthread(conntoserverthread, this);return;/*/ 點(diǎn)擊注銷(xiāo)按鈕*/void cmypop3dl

15、g:onlogoff()/ todo: 在此添加控件通知處理程序代碼tchar sendbuf10, recvbuf128;memset(recvbuf, 0, sizeof(recvbuf);strcpy(sendbuf, quit rn);/ 發(fā)送quit 消息,結(jié)束本次會(huì)話。send(m_sock, sendbuf, strlen(sendbuf), 0);int rt = recv(m_sock, recvbuf, sizeof(recvbuf), 0);/ 顯示服務(wù)器返回的信息。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); / 創(chuàng)建流式套接字。/ 獲取pop3 服務(wù)器的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);/ 創(chuàng)建一個(gè)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);/ 連接到服務(wù)器if (0 != connect(pthis

18、-m_sock, (sockaddr*)&sockaddr, sizeof(sockaddr)pthis-setdlgitemtext(idc_static_errorinfo, _t(連接服務(wù)器失敗。輸入是否有誤?);pthis-loginfail();return 1;/ 檢查服務(wù)器返回的信息。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(連接服務(wù)器失敗。);pthis-loginfail();return 1;/ 保存服務(wù)器傳回來(lái)的信息。pthis-m_cmdinfo += rnresponse to conn: ;pthis-m_cmdinfo += buf;pthis-sendmessage(wm_connserver_sucx, 0, 0);/*/ 連接服務(wù)器成功的消息響應(yīng)函數(shù)*/lresult cmypop3dlg:login(wparam wparam, lparam lparam)/ 顯示服務(wù)器傳回來(lái)的信息setdlgitemtext(idc_edit6, m_cmdinfo);/ 更新界面

20、setdlgitemtext(idc_static_errorinfo, _t(連接服務(wù)器成功!);afxbeginthread(loginthread, this); / 開(kāi)啟登錄線程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 的返回值。/ 發(fā)送用戶(hù)名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(發(fā)送用戶(hù)名失敗);pthis-loginfail();return 1;rs = recv(pthis-m_sock, recvbuf, sizeof(recvbuf), 0);/ 保存并顯示服務(wù)器返回結(jié)果。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(用戶(hù)名不正確);pthis-loginfail();return 1;/ 發(fā)送密碼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(發(fā)送密碼失敗);pthis-loginfail();return 1;rs = recv(pthis-m_sock, recvbuf, sizeof(recvbuf), 0);/ 保存并顯示服務(wù)器返回結(jié)果。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);/ 發(fā)送list消息,以便獲取郵件總數(shù)。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(您的郵箱當(dāng)前沒(méi)有新郵件);setdlgitemtext(idc_edit5, m_letterinfo);return 0;elsefor (int

27、 i(1); i=sum; +i) / 注意,郵件編號(hào)從開(kāi)始,不是從開(kā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);/ 發(fā)送retr 命令,獲取某封郵件的內(nèi)容。sprintf(sendbuf, retr %drn, sum);send(m_sock, sendbuf, strlen(sendbuf), 0);do /郵件可能非常大,以至于緩沖區(qū)放不下,這是就需要循環(huán)多次的recv/ 清空接收緩沖區(qū)。memset(recvbuf, 0, sizeof(recvbuf);/接收并顯示郵件內(nèi)容。rs = pop3recv(m_sock, recvbuf, sizeof(recvbuf)-1, 0); /長(zhǎng)度必須減一,最后一個(gè)字符必須是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(收取郵件出現(xiàn)錯(cuò)誤);return 1;if (create) /循環(huán)第一次執(zhí)行時(shí)獲取郵件標(biāo)題,創(chuàng)建文件并打開(kāi)。直到循環(huán)結(jié)束才關(guān)閉文件。create = false; / 循環(huán)下次執(zhí)行到這里時(shí)跳過(guò)。/獲取郵件標(biāo)題,以此標(biāo)題作為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、和/或調(diào)用默認(rèn)值closesocket(m_sock);cdialog:onclose();3. 網(wǎng)上書(shū)店源程序1 default.aspx 網(wǎng)站首頁(yè)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 登錄頁(yè)面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 = 用戶(hù)名或密碼錯(cuò)誤!請(qǐng)重試。; userlogin1._userpwd.focus(); 3 showbookdetail.aspx 瀏覽書(shū)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 購(gòu)物車(chē)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論