計算機網(wǎng)絡應用設計實驗報告_第1頁
計算機網(wǎng)絡應用設計實驗報告_第2頁
計算機網(wǎng)絡應用設計實驗報告_第3頁
計算機網(wǎng)絡應用設計實驗報告_第4頁
計算機網(wǎng)絡應用設計實驗報告_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、),1,pre_config_internet_access);updatedata(true);try /根據(jù)給出的參數(shù)連接到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+編寫,開發(fā)環(huán)境為vs2008

7、,這里只貼了與實現(xiàn)相關的代碼,界面部分的代碼不在此描述了。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();/*/ 自定義的通過套接字發(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;/*/ 從服務器對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;/*/ 從服務器返回的郵件內容中抽取郵件標題*/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(請?zhí)顚憄op3 服務器地址);return;else if (m_portno.isempty()setdlgitemtext(idc_static_errorinfo, _t(請?zhí)顚懚丝谔?;return;else if (m_username.isempty()set

14、dlgitemtext(idc_static_errorinfo, _t(請?zhí)顚懩挠脩裘?;return;else if (m_passwd.isempty()setdlgitemtext(idc_static_errorinfo, _t(請?zhí)顚懩泥]箱密碼);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);/ 發(fā)送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); / 創(chuàng)建流式套接字。/ 獲取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);/ 創(chuàng)建一個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);/*/ 連接服務器成功的消息響應函數(shù)*/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 的返回值。/ 發(fā)送用戶名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ā)送用戶名失敗);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;/ 發(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);/ 保存并顯示服務器返回結果。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(您的郵箱當前沒有新郵件);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);/ 發(fā)送retr 命令,獲取某封郵件的內容。sprintf(sendbuf, retr %drn, sum);send(m_sock, sendbuf, strlen(sendbuf), 0);do /郵件可能非常大,以至于緩沖區(qū)放不下,這是就需要循環(huán)多次的recv/ 清空接收緩沖區(qū)。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(收取郵件出現(xiàn)錯誤);return 1;if (create) /循環(huán)第一次執(zhí)行時獲取郵件標題,創(chuàng)建文件并打開。直到循環(huán)結束才關閉文件。create = false; / 循環(huán)下次執(zhí)行到這里時跳過。/獲取郵件標題,以此標題作為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. 網(wǎng)上書店源程序1 default.aspx 網(wǎng)站首頁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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論