intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình windows với MFC Micrisoft visual C++6.0- P13

Chia sẻ: Cong Thanh | Ngày: | Loại File: PDF | Số trang:10

159
lượt xem
40
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'lập trình windows với mfc micrisoft visual c++6.0- p13', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Lập trình windows với MFC Micrisoft visual C++6.0- P13

  1. - Hoäp nhaäp soá hieäu mail nhaän veà : Edit - Haønh vi protected : isOK kieåm tra traû lôøi cuûa mail server treân döõ IDC_MAIL_NO lieäu nhaän ñöôïc sau moãi taùc vuï lieân laïc: - Hoäp hieån thò noäi dung mail : Edit IDC_MAIL BOOL CPOP3Dlg::isOK(char *result) - Nuùt leänh laáy thoâng tin veà mail : Button IDOK { - Nuùt leänh thöïc hieän nhaän mail : Button IDC_READ_MAIL return ( result[0] == '+' && result[1] == 'O' && - Haønh vi OnOK öùng vôùi nuùt OK thöïc hieän laáy thoâng tin veà hoäp mail: // +OK : Thaønh coâng result[2] == 'K' ); void CPOP3Dlg::OnOK() } { - Haønh vi OnReadMail (nuùt choïn IDC_READ_MAIL) taûi mail veà: char s[1025]; void CPOP3Dlg::OnReadMail() UINT port; { char s[10241]; CSocket m_sock; UINT port; GetDlgItemText (IDC_SERVER_IP, s, 1024); CSocket m_sock; port = GetDlgItemInt(IDC_SERVER_PORT); GetDlgItemText(IDC_SERVER_IP, s, 1024); m_sock.Create(); port = GetDlgItemInt(IDC_SERVER_PORT); if (!m_sock.Connect(s, port)) return; m_sock.Create(); if (!m_sock.Connect(s, port)) return; if ( !m_sock.Receive(s, 1024) || !isOK(s) ) return; if ( !m_sock.Receive(s, 1024) || !isOK(s) ) return; // Ñaêng nhaäp strcpy(s, "USER "); // Ñaêng nhaäp strcpy(s, "USER "); GetDlgItemText(IDC_USER_NAME, s + strlen(s), 1024); GetDlgItemText(IDC_USER_NAME, s + strlen(s), 1024); strcat(s, "\r\n"); strcat(s, "\r\n"); m_sock.Send(&s, strlen(s)); m_sock.Send(&s, strlen(s)); if ( !m_sock.Receive(s, 1024) || !isOK(s) ) return; if ( !m_sock.Receive(s, 1024) || !isOK(s) ) return; // Ñaêng kyù password strcpy(s, "PASS "); // Hôïp leä ? strcpy(s, "PASS "); GetDlgItemText(IDC_USER_PASSWORD, s+strlen(s), 1024); GetDlgItemText(IDC_USER_PASSWORD, s+strlen(s), 1024); strcat(s, "\r\n"); strcat(s, "\r\n"); m_sock.Send(&s, strlen(s)); m_sock.Send(&s, strlen(s)); if ( !m_sock.Receive(s, 1024) || !isOK(s) ) return; if ( !m_sock.Receive(s, 1024) || !isOK(s) ) return; // Laáy thoâng tin hoäp mail strcpy(s, "LIST\r\n"); // Taûi mail veà strcpy(s, "RETR "); m_sock.Send(&s, strlen(s)); GetDlgItemText (IDC_MAIL_NO, s + strlen(s), 1024); if ( (port = m_sock.Receive(s, 1024)) < 1 || !isOK(s) ) strcat(s, "\r\n"); return; m_sock.Send(&s, strlen(s)); s[port] = '\0'; if ( (port = m_sock.Receive(s, 10240)) == 0 || !isOK(s) ) SetDlgItemText(IDC_MAIL, s+4); // Boû qua +OK return; // Keát thuùc... s[port] = '\0'; SetDlgItemText(IDC_MAIL, strstr(s, "From")); strcpy(s, "QUIT\r\n"); // Keát thuùc strcpy(s, "QUIT\r\n"); m_sock.Send(&s, strlen(s)); m_sock.Send(&s, strlen(s)); m_sock.Close(); m_sock.Close(); } } MFC vôùi Internet 222 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 221
  2. pstrProxyName : 13.8 TCP VÔÙI HTTP & FTP: Proxy. Söû duïng cho truy xuaát thoâng qua proxy. pstrProxyBypass : HTTP vaø FTP laø caùc giao thöùc taàng öùng duïng ñöôïc xaây döïng döïa treân giao Danh saùch ñòa chæ caùc server ñöôïc truy xuaát tröïc thöùc TCP ôû taàng truyeàn taûi (moâ hình DARPA). tieáp (duøng cho aán ñònh truy xuaát qua proxy). dwFlags : HTTP: Giao thöùc phuïc vuï moâ hình öùng duïng Client/Server, duøng phoå Thoâng soá veà cheá ñoä toái öu trong truy xuaát server. bieán trong vieäc truyeàn taûi caùc noäi dung HTML (www) giöõa INTERNET_FLAG_DONT_CACHE : client vaø server. Trong ñoù öùng duïng client keát noái vôùi öùng duïng Khoâng söû duïng cache ôû taát caû caùc host lieân server thoâng qua coång TCP xaùc ñònh, thoâng thöôøng laø 80. quan ñeán caùc taùc vuï taäp tin cuûa giao taùc. FTP: Giao thöùc truyeàn taûi taäp tin. ÖÙng duïng client keát noái vôùi öùng INTERNET_FLAG_OFFLINE : duïng server thoâng qua hai coång TCP; moät duøng ñieàu khieån Söû duïng cache cho caùc taùc vuï taäp tin. truyeàn, moät duøng truyeàn döõ lieäu; thoâng thöôøng laø 20 vaø 21. CFtpConnection* GetFtpConnection ( LPCTSTR pstrServer, // Ñòa chæ FTP server MFC hoã trôï raát maïnh cho vieäc khai thaùc caùc giao thöùc noùi treân thoâng LPCTSTR pstrUserName = NULL, // Teân ñaêng nhaäp qua caùc lôùp ñoái töôïng trong thö vieän AfxInet.h. LPCTSTR pstrPassword = NULL, // password hôïp leä 13.8.1 CInternetSession: INTERNET_PORT nPort = /* soá hieäu port keát noái */ CInternetSession laø lôùp ñoái töôïng quaûn lyù moät giao taùc xaùc ñònh vôùi maïng INTERNET_INVALID_PORT_NUMBER, internet, keå caû vieäc thöïc hieän keát noái vôùi proxy server. BOOL bPassive = FALSE // Cô cheá keát noái Moãi giao taùc internet cho pheùp thöïc hieän caùc taùc vuï lieân quan ñeán taäp tin ); Traû veà con troû ñoái töôïng quaûn lyù lieân keát vôùi FTP server. treân caùc internet server thoâng qua caùc dòch vuï ñaëc bieät nhö FTP, HTTP. bPassive : Qui ñònh cô cheá choïn port cho keát noái. CInternetSession ( - TRUE : Do ngöôøi duøng choïn. LPCTSTR pstrAgent = NULL, - FALSE: Do FTP Server choïn (laø cô cheá maëc nhieân). DWORD dwContext = 1, CHttpConnection* GetHttpConnection ( DWORD dwAccessType = LPCTSTR pstrServer, // Ñòa chæ HTTP server INTERNET_OPEN_TYPE_PRECONFIG, INTERNET_PORT nPort = /* soá hieäu port */ LPCTSTR pstrProxyName = NULL, INTERNET_INVALID_PORT_NUMBER, LPCTSTR pstrProxyBypass = NULL, LPCTSTR pstrUserName = NULL, // Teân ñaêng nhaäp DWORD dwFlags = 0 LPCTSTR pstrPassword = NULL // password hôïp leä ); Haønh vi taïo laäp vaø khôûi taïo thoâng soá cho ñoái töôïng giao taùc internet. ); Traû veà con troû ñoái töôïng quaûn lyù lieân keát vôùi HTTP server. pstrAgent : Teân öùng duïng. Moät soá öùng duïng duøng teân laøm giaù trò nhaän dieän ñoái vôùi server. 13.8.2 CInternetFile: dwContext : Soá hieäu nhaän dieän dieãn tieán cuûa taùc vuï. CInternetFile laø lôùp ñoái töôïng quaûn lyù moät taäp tin treân maïng internet. dwAccessType : Kieåu truy xuaát. CInternetFile( ); Taïo laäp ñoái töôïng quaûn lyù taäp tin. INTERNET_OPEN_TYPE_PRECONFIG : virtual LONG Seek ( Theo aán ñònh maëc nhieân cuûa heä thoáng. LONG lOffset, // Cöï ly dôøi töông ñoái INTERNET_OPEN_TYPE_DIRECT : UINT nFrom // Vò trí laøm moác. Tröïc tieáp khoâng thoâng qua proxy. ); AÁn ñònh vò trí con troû (ñaàu ñoïc/ghi döõ lieäu) trong taäp tin. INTERNET_OPEN_TYPE_PROXY : Caùc giaù trò duøng cho nFrom coù theå laø: Thoâng qua proxy. - CFile::current : Tính töø vò trí hieän haønh cuûa con troû taäp tin. MFC vôùi Internet 224 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 223
  3. LPCTSTR pstrNew - CFile::begin : Tính töø ñaàu taäp tin. // Teân môùi cuûa thö muïc - CFile::end : Tính töø cuoái taäp tin. ); Ñoåi teân thö muïc treân FTP server. virtual UINT Read ( BOOL Remove ( void* lpBuf, LPCTSTR pstrFileName // Ñöôøng daãn vaø teân taäp tin // Ñòa chæ vuøng ñeäm chöùa döõ lieäu ñoïc UINT nCount // Kích thöôùc döõ lieäu ñoïc vaøo ); Xoùa taäp tin treân FTP server. ); Ñoïc döõ lieäu töø taäp tin. CInternetFile* OpenFile ( LPCTSTR pstrFileName, // Ñöôøng daãn vaø teân taäp tin ñöôïc môû virtual void Write ( const void* lpBuf, DWORD dwAccess = GENERIC_READ, // Ñòa chæ vuøng ñeäm chöùa döõ lieäu ghi ra UINT nCount DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY, // Kích thöôùc döõ lieäu ñöôïc ghi DWORD dwContext = 1 ); Ghi döõ lieäu ra taäp tin. virtual BOOL ReadString ( ); Môû taäp tin treân FTP server. Traû veà con troû ñoái töôïng CInternetFile CString& rString // Bieán chöùa chuoãi ñoïc vaøo quaûn lyù taäp tin ñöôïc môû. dwAccess : Cheá ñoä môû taäp tin, choïn moät trong caùc cheá ñoä môû sau: ); Ñoïc moät chuoãi töø taäp tin. virtual void WriteString ( GENERIC_WRITE : Môû ñeå ghi. LPCTSTR pstr // Bieán chöùa chuoãi ñöôïc ghi ra GENERIC_READ : Môû ñeå ñoïc. dwFlags : Kieåu noäi dung taäp tin. ); Ghi moät chuoãi ra taäp tin. virtual void Close( ); Ñoùng taäp tin, chaám döùt moïi taùc vuï lieân quan. FTP_TRANSFER_TYPE_ASCII : Maõ ASCII FTP_TRANSFER_TYPE_BINARY : Maõ nhò phaân 13.8.3 CFtpConnection: BOOL PutFile ( CFtpConnection laø lôùp ñoái töôïng quaûn lyù moät lieân keát vôùi FTP server. Ñoái LPCTSTR pstrLocalFile, // Ñöôøng daãn vaø teân taäp tin ôû client töôïng naøy coù theå nhaän ñöôïc töø ñoái töôïng quaûn lyù giao taùc vôùi maïng internet LPCTSTR pstrRemoteFile, // Ñöôøng daãn vaø teân taäp tin ôû server thoâng qua haønh vi GetFtpConnection vôùi thoâng soá thích hôïp (13.8.1). Caùc DWORD dwFlags = /* Kieåu noäi dung taäp tin */ haønh vi ñaëc tröng cuûa lôùp ñoái töôïng CFtpConnection nhö sau: FTP_TRANSFER_TYPE_BINARY, BOOL SetCurrentDirectory ( DWORD dwContext = 1 // Soá hieäu nhaän dieän taùc vuï LPCTSTR pstrDirName // Ñöôøng daãn cuûa thö muïc. ); Taûi moät taäp tin töø host laøm vieäc leân FTP server (upload). ); AÁn ñònh thö muïc laøm vieäc maëc nhieân treân FTP server. BOOL GetFile ( BOOL GetCurrentDirectory ( LPCTSTR pstrRemoteFile, // Ñöôøng daãn teân taäp tin treân server CString& strDirName // Bieán chöùa keát quaû LPCTSTR pstrLocalFile, // Ñöôøng daãn teân taäp tin treân client ); Laáy ñöôøng daãn cuûa thö muïc laøm vieäc treân FTP server. BOOL bFailIfExists = TRUE, // Cheá ñoä xöû lyù truøng teân taäp tin. BOOL RemoveDirectory ( DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL, LPCTSTR pstrDirName // Ñöôøng daãn thö muïc DWORD dwFlags = /* Kieåu noäi dung taäp tin */ ); Xoùa thö muïc treân FTP server. FTP_TRANSFER_TYPE_BINARY, BOOL CreateDirectory ( DWORD dwContext = 1 LPCTSTR pstrDirName // Ñöôøng daãn vaø teân thö muïc ); Taûi moät taäp tin töø FTP server veà host laøm vieäc. ); Taïo môùi thö muïc treân FTP server. bFailIfExists : Qui ñònh caùch thöïc hieän khi teân duøng cho taäp tin ghi BOOL Rename ( truøng vôùi teân moät taäp tin ñaõ coù treân host laøm vieäc. LPCTSTR pstrExisting, // Ñöôøng daãn vaø teân cuõ cuûa thö muïc MFC vôùi Internet 226 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 225
  4. TRUE Thoâng baùo loãi. BOOL TimThay = TimFile.FindFile(_T("*.TXT")); FALSE Töï ñoäng ghi choàng leân noäi dung ñaõ coù. while (TimThay) { dwAttributes : Thuoäc tính taäp tin. Coù theå keát hôïp caùc giaù trò sau: TimThay = TimFile.FindNextFile(); … // Xöû lyù taäp tin tìm thaáy FILE_ATTRIBUTE_ARCHIVE : Taäp tin ñöôïc caäp nhaät. } FILE_ATTRIBUTE_DIRECTORY : Thö muïc. } FILE_ATTRIBUTE_NORMAL : Taäp tin bình thöôøng. catch (CInternetException* pEx) { FILE_ATTRIBUTE_HIDDEN : Taäp tin aån maët. … // Coù loãi FILE_ATTRIBUTE_READONLY : Taäp tin chæ ñoïc. } FILE_ATTRIBUTE_SYSTEM : Taäp tin heä thoáng. if (pConnect != NULL) pConnect->Close(); FILE_ATTRIBUTE_TEMPORARY : Taäp tin söû duïng taïm thôøi. delete pConnect; virtual void Close( ); Keát thuùc lieân keát vôùi FTP server. 13.8.5 CHttpConnection: 13.8.4 CFtpFindFile: CHttpConnection laø lôùp ñoái töôïng quaûn lyù moät lieân keát vôùi HTTP server. CFtpFindFile laø lôùp ñoái töôïng quaûn lyù moät coâng cuï tìm kieám taäp tin treân Ñoái töôïng naøy coù theå nhaän ñöôïc töø ñoái töôïng quaûn lyù giao taùc vôùi maïng FTP server. Caùc haønh vi ñaëc tröng cuûa lôùp nhö sau: internet thoâng qua haønh vi GetHttpConnection vôùi thoâng soá thích hôïp (13.8.1). CFtpFileFind( CFtpConnection* pConnection ); Taïo laäp vaø khôûi taïo Lôùp CHttpConnection coù haønh vi ñaëc tröng sau: thoâng soá cho ñoái töôïng tìm kieám taäp tin. CHttpFile* OpenRequest ( virtual BOOL FindFile ( int nVerb, LPCTSTR pstrName = NULL, // Daïng teân taäp tin caàn tìm LPCTSTR pstrObjectName, DWORD dwFlags = INTERNET_FLAG_RELOAD LPCTSTR pstrReferer = NULL, ); Khôûi ñoäng quaù trình tìm kieám taäp tin. Traû veà giaù trò TRUE neáu khôûi DWORD dwContext = 1, ñieåm tìm kieám thaønh coâng. LPCTSTR* pstrAcceptTypes = NULL, Coù theå söû duïng ? , * ñeå aán ñònh daïng teân cuûa taäp tin caàn tìm. LPCTSTR pstrVersion = NULL, dwFlags = INTERNET_FLAG_DONT_CACHE khoâng söû duïng cache. DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT virtual BOOL FindNextFile( ); Tìm taäp tin keá tieáp thoûa ñieàu kieän. Traû ); Traû veà con troû ñoái töôïng CHttpFile quaûn lyù taäp tin döõ lieäu caàn truy veà giaù trò TRUE neáu taùc vuï tìm kieám thaønh coâng, neáu ngöôïc laïi thì xem xuaát treân HTTP server. nhö ñaõ tìm heát caùc taäp tin thoûa ñieàu kieän tìm kieám. nVerb: AÁn ñònh loaïi taùc vuï truy xuaát ñoái vôùi taäp tin döõ lieäu. CString GetFileURL( ); Traû veà chuoãi ñöôøng daãn cuûa taäp tin vöøa tìm CHttpConnection::HTTP_VERB_POST : Ghi döõ lieäu ñöôïc theo yeâu caàu. CHttpConnection::HTTP_VERB_GET : Ñoïc döõ lieäu Ñoaïn chöông trình sau thöïc hieän tìm kieám caùc taäp tin vôùi teân coù phaàn CHttpConnection::HTTP_VERB_DELETE : Xoùa taäp tin döõ lieäu. môû roäng laø ‘txt’ treân FTP server: pstrObjectName : Ñöôøng daãn vaø teân taäp tin döõ lieäu treân HTTP server. pstrReferer : Ñòa chæ (root) cuûa taäp tin döõ lieäu. CInternetSession sess(_T("FTP - Example")); // Quaûn lyù giao taùc dwContext : Soá hieäu nhaän dieän taùc vuï truy xuaát. // Lieân keát vôùi server pstrAcceptTypes : Chöùa caùc kieåu döõ lieäu maø client mong muoán khai CFtpConnection* pConnect = NULL; thaùc trong noäi dung cuûa taäp tin döõ lieäu ñöôïc truy try { pConnect = sess.GetFtpConnection(“ftp.hcmueco.edu.vn”); xuaát. Ví duï: "text/*" = Chæ laáy noäi dung text, khoâng // Ñoái töôïng tìm kieám CFtpFileFind TimFile ( pConnect ); nhaän döõ lieäu laø hình aûnh, maõ,… MFC vôùi Internet 228 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 227
  5. pstrVersion: Giao thöùc söû duïng, maëc nhieân laø "HTTP/1.0" HTTP_ADDREQ_FLAG_REPLACE : Thay theá noäi dung tröôùc dwFlags : Toái öu trong truy xuaát bôûi noäi dugn sau coù cuøng INTERNET_FLAG_RELOAD : Khoâng ñoïc töø cache. loaïi yeâu caàu. INTERNET_FLAG_DONT_CACHE : Khoâng ñeå laïi cache. "Accept: text/*" vaø "Accept: audio/*" "Accept: audio/*" HTTP_ADDREQ_FLAG_ADD : Nhö _REPLACE vaø töï 13.8.6 CHttpFile: ñoäng boå sung neáu loaïi CHttpFile laø lôùp ñoái töôïng quaûn lyù moät taäp tin döõ lieäu ñoäc laäp ñang ñöôïc yeâu caàu môùi laø chöa coù. truy xuaát treân HTTP server. BOOL SendRequest ( BOOL QueryInfo ( CString& strHeaders, // Noäi dung yeâu caàu. DWORD dwInfoLevel, // Thoâng soá truy vaán LPVOID lpOptional = NULL, // Caùc dieãn giaûi cuûa client (khoâng LPVOID lpvBuffer, // Vuøng ñeäm nhaän keát quaû DWORD dwOptionalLen = 0 // baét buoäc ) LPDWORD lpdwBufferLength, // Chieàu daøi vuøng ñeäm ); Göûi yeâu caàu lieân quan taäp tin döõ lieäu leân HTTP server. Neáu khoâng LPDWORD lpdwIndex = NULL chæ ra noäi dung yeâu caàu thì maëc nhieân duøng yeâu caàu aán ñònh bôûi haønh ); Truy vaán thoâng tin lieân quan ñeán taäp tin döõ lieäu. Traû veà giaù trò TRUE vi AddRequestHeaders. neáu taùc vuï truy vaán thaønh coâng. Thoâng soá truy vaán coù theå laø: BOOL SendRequestEx ( HTTP_QUERY_FLAG_REQUEST_HEADERS : Thoâng tin header. LPINTERNET_BUFFERS lpBuffIn, // Kích thöôùc döõ lieäu HTTP_QUERY_LAST_MODIFIED : Ngaøy caäp nhaät cuoái cuøng. LPINTERNET_BUFFERS lpBuffOut, // Vuøng ñeäm chöùa döõ lieäu BOOL AddRequestHeaders ( DWORD dwFlags = HSR_INITIATE, CString& str, // Noäi dung thoâng soá yeâu caàu DWORD dwContext = 1 DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW ); Ghi thoâng tin leân taäp tin döõ lieäu treân HTTP server. ); Caäp nhaät moät yeâu caàu môùi vaøo danh saùch caùc yeâu caàu ñoái vôùi taäp tin BOOL EndRequest ( döõ lieäu. Caùc yeâu caàu naøy seõ ñöôïc göûi leân HTTP server thöïc hieän. DWORD dwFlags = 0, Noäi dung moãi yeâu caàu phaûi keát thuùc baèng . Xem (RFC2616): LPINTERNET_BUFFERS lpBuffIn = NULL, - Accept : Ñeà nghò kieåu döõ lieäu truy xuaát trong taäp tin. DWORD dwContext = 1 Cuù phaùp: "Accept: (media-range [ accept-params ][,])* " ); Ngöøng taùc vuï ghi treân taäp tin döõ lieäu cuûa HTTP server. Ví duï: "Accept: audio/*" , "Accept: text/plain" virtual CString GetFileURL( ); Traû veà ñöôøng daãn vaø teân cuûa taäp tin döõ - User-Agent : Teân, duøng nhaän dieän öùng duïng yeâu caàu. lieäu treân HTTP server. Cuù phaùp : "User-Agent" ":" Name( product | comment )*" virtual void Close( ); Keát thuùc truy xuaát taäp tin döõ lieäu. Ví duï : "User-Agent: Mr.EMP" - Content-Type : Kieåu noäi dung taäp tin döõ lieäu. Ví duï: Ñoaïn chöông trình sau thöïc hieän keát noái vôùi HTTP server. Ñoïc vaø Cuù phaùp : "Content-Type: media-type*" hieån thò noäi dung cuûa taäp tin /index.html treân server naøy. Ví duï: "Content-Type: text/html; charset=ISO-8859-4" dwFlags : Thoâng soá aán ñònh cô cheá caäp nhaät: HTTP_ADDREQ_FLAG_COALESCE : Troän caùc noäi dung cuûa cuøng moät loaïi yeâu caàu: "Accept: text/*" vaø "Accept: audio/*" "Accept: text/*, audio/*" MFC vôùi Internet 230 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 229
  6. Sau ñaây laø caùc böôùc thöïc hieän döï aùn cuûa öùng duïng noùi treân: CInternetSession session("HTTP - Example"); Duøng MFC Wizard, taïo döï aùn Ftp vôùi giao dieän chính laø dialog. CHttpFile* file=NULL; Boå sung chæ thò: #include cho taäp tin stdafx.h cuûa döï aùn. CString strServer = "www.hcmueco.edu.vn"; CString strObject("/index.html"); Thöïc hieän caùc caøi ñaët sau cho lôùp dialog CFtpDlg cuûa döï aùn: INTERNET_PORT port = INTERNET_DEFAULT_HTTP_PORT; - Môû dialog resource, caøi ñaët caùc control sau: CString strHeaders ( - Hoäp nhaäp ñòa chæ FTP server : Edit IDC_URL "Accept: text/*\r\n” - Hoäp hieån thò danh saùch caùc taäp tin : ListBox IDC_FILE_LIST “User-Agent: Mr.Emp\r\n" - Nuùt leänh thöïc hieän tìm kieám taäp tin : Button IDOK "Content-Type: application/x-www-form-urlencoded\r\n"); - Taïo bieán m_fileList cho control IDC_FILE_LIST. CHttpConnection* server = NULL; - Haønh vi OnOK öùng vôùi nuùt choïn IDOK thöïc hieän tìm taát caû caùc taäp try { tin trong thö muïc goác cuûa FTP server vaø ñöa vaøo danh saùch: server=session.GetHttpConnection(strServer, port); file=server->OpenRequest ( Caøi ñaët töông töï ví duï muïc (13.8.4) CHttpConnection::HTTP_VERB_POST,strObject ); Phaàn caøi ñaët cuûa Xöû lyù taäp tin tìm thaáy nhö sau: } m_fileList.ResetContent(); catch (CInternetException* pEx) { while (TimThay) { … // Coù loãi bWorking = TimFile.FindNextFile(); } m_fileList.AddString(TimFile.GetFileURL()); if (server==NULL) return; } if (file!=NULL) { Bieân dòch vaø chaïy öùng duïng. file->AddRequestHeaders(strHeaders); // Xaùc laäp yeâu caàu truy xuaát 13.8.8 Thöïc hieän öùng duïng HTTP client ñôn giaûn: file->SendRequest(); // Söû duïng cho ñoïc chuoãi Trình töï tieán haønh caùc xöû lyù cuûa öùng duïng nhö sau: CString line; - Thieát laäp giao taùc internet, taïo lieân keát HTTP töø giao taùc naøy. while (file->ReadString(line)) { … // Xöû lyù noäi dung ñoïc ñöôïc - Taïo ñoái töôïng CHttpFile cho taäp tin quan taâm treân HTTP server. - Söû duïng ñoái töôïng CHttpFile ñeå QueryInfo hoaëc aán ñònh truy xuaát vôùi } file->Close(); AddRequestHeaders vaø SendRequest treân noäi dung taäp tin. delete file; - Truy xuaát döõ lieäu: Read, ReadString hoaëc Write, WriteString. } Sau ñaây laø caùc böôùc thöïc hieän döï aùn cuûa öùng duïng noùi treân: server->Close(); delete server; Duøng MFC Wizard, taïo döï aùn Http vôùi giao dieän chính laø dialog. Boå sung chæ thò: #include cho taäp tin stdafx.h cuûa döï aùn. 13.8.7 Thöïc hieän öùng duïng FTP client ñôn giaûn: Thöïc hieän caùc caøi ñaët sau cho lôùp dialog CHttpDlg cuûa döï aùn: Trình töï tieán haønh caùc xöû lyù cuûa öùng duïng nhö sau: - Môû dialog resource, caøi ñaët caùc control sau: - Thieát laäp giao taùc internet, taïo lieân keát FTP töø giao taùc naøy. - Hoäp nhaäp ñòa chæ HTTP server : Edit IDC_URL - Taïo ñoái töôïng CFtpFileFind töø lieân keát FTP, tìm taäp tin treân ftp server. - Hoäp hieån thò noäi dung taäp tin : Edit IDC_SOURCE - Taïo ñoái töôïng CInternetFile töø taäp tin tìm ñöôïc. Thöïc hieän caùc taùc vuï - Nuùt leänh thöïc hieän taûi taäp tin veà : Button IDOK ñoïc ghi moät caùch thích hôïp. - Ñoùng caùc ñoái töôïng. MFC vôùi Internet 232 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 231
  7. - Haønh vi OnOK öùng vôùi nuùt choïn IDOK thöïc hieän taûi noäi dung taäp tin töø ñòa chæ nhaäp trong hoäp nhaäp: Caøi ñaët töông töï ví duï muïc (13.8.6) Phaàn caøi ñaët cuûa Xöû lyù noäi dung ñoïc ñöôïc nhö sau: CString line, info; info.Empty(); while (file->ReadString(line)) { info = info + line; info = info + "\r\n"; } SetDlgItemText(IDC_SOURCE, info); Bieân dòch vaø chaïy öùng duïng. THÖÏC HAØNH: 1. Xaây döïng öùng duïng CHAT vôùi moät trong caùc giao thöùc TCP vaø UDP. 2. Xaây döïng öùng duïng FTP explorer (xem windows explorer). 3. Xaây döïng öùng duïng chôi baøi tieán leân treân maïng (moâ hình client/server). 4. Xaây döïng öùng duïng thi traéc nghieäm treân maïng. - ÖÙng duïng giaùm thò laø trung taâm keát noái vôùi caùc öùng duïng kieåm tra chaïy treân caùc host laøm baøi. ÖÙng duïng giaùm thò ñieàu khieån ñoàng boä caùc öùng duïng kieåm tra. - ÖÙng duïng kieåm tra chôø chæ thò töø öùng duïng giaùm thò, taïo giao dieän laøm baøi vôùi ngöôøi duøng, thöôøng xuyeân thoâng baùo tình traïng baøi laøm cuûa ngöôøi duøng cho öùng duïng giaùm thò quaûn lyù vaø baûo löu. - Khi baét ñaàu, öùng duïng gíam thò chuû ñoäng keát noái, öùng duïng laøm baøi chôø keát noái ñeå laáy thoâng tin veà öùng duïng giaùm thò vaø caùc thoâng tin khaùc veà ñeà thi, thoâng tin baûo löu neáu tröôùc ñoù coù söï coá. 5. Quan saùt öùng duïng Yahoo Messenger!. Keát hôïp hai kieåu öùng duïng rtf view (11.8) vaø öùng duïng TCP (13.5) ñeå thöïc hieän öùng duïng töông töï. 6. Vieát öùng duïng mail server vaø mail client ñôn giaûn. 7. Vieát öùng duïng ftp server ñôn giaûn. 8. Vieát öùng duïng http server ñôn giaûn (RFC1945). 9. Vieát öùng duïng voice chat ñôn giaûn. MFC vôùi Internet 233
  8. PHUÏ LUÏC A: Haønh vi laø khaû naêng öùng xöû cuûa ñoái töôïng vôùi moâi tröôøng xung quanh, noù taùc ñoäng vaø thay ñoåi thuoäc tính cuûa baûn thaân ñoái töôïng vaø caùc ñoái tuôïng lieân Moät soá vaán ñeà quan. Haønh vi theå hieän maët hoaït ñoäng cuûa ñoái töôïng. Ví duï: laäp trình höôùng ñoái töôïng Hoaït ñoäng soáng cuûa con ngöôøi laø quaù trình vaän ñoäng thay ñoåi baûn thaân con ngöôøi vaø taùc ñoäng (cuõng nhö bò taùc ñoäng) ñeán moâi tröôøng xung quanh. A.1 LAÄP TRÌNH HÖÔÙNG ÑOÁI TÖÔÏNG (OOP): Ta coù moâ hình cuûa ñoái töôïng nhö sau: Laäp trình höôùng ñoái töôïng (Object-Oriented Programming) laø phöông phaùp laäp trình giaûi quyeát baøi toaùn döïa treân söï phoái hôïp caùc ñoái töôïng khaùch quan Ñoái töôïng = Thuoäc tính + Haønh vi trong khoâng gian baøi toaùn. Caùc ñoái töôïng naøy hoaït ñoäng vaø töông taùc laãn nhau ñeå ñöa baøi toaùn veà traïng thaùi mong muoán. A.2.5 Chöông trình (Program): Phöông phaùp tieáp caän naøy cho pheùp taùch khoâng gian baøi toaùn thaønh caùc Döôùi goùc ñoä OOP, chöông trình laø chuoãi thao taùc phoái hôïp cuûa moät hay taäp hôïp nhieàu ñoái töôïng, caùc ñoái töôïng coù tính ñoäc laäp töông ñoái vôùi nhau. Do nhieàu ñoái töôïng nhaèm ñaït ñeán moät keát cuïc mong muoán. Caùc thao taùc naøy cuûa ñoù, töø moät coâng vieäc lôùn phöùc taïp ta coù theå phaân chia thaønh nhieàu coâng vieäc caùc ñoái töôïng phaûi ñöôïc daøn döïng tröôùc, ta coù theå goïi ñoù laø kòch baûn. nhoû ñôn giaûn vaø deã thöïc hieän hôn, ñoàng thôøi vieäc ñieàu chænh boå sung tính naêng cho moãi ñoái töôïng cuõng khoâng aûnh höôûng ñeán hoaït ñoäng cuûa caùc ñoái Chöông trình = Taäp hôïp caùc ñoái töôïng + Kòch baûn töôïng khaùc. Nhôø ñoù, khi coù nhu caàu phaùt trieån baøi toaùn thì ta khoâng phaûi xaây döïng laïi töø ñaàu maø coù theå döïa treân nhöõng noäi dung ñaõ coù. Ñaây chính laø moät öu ñieåm lôùn so vôùi laäp trình caáu truùc. A.3 ÑAËC ÑIEÅM LAÄP TRÌNH HÖÔÙNG ÑOÁI TÖÔÏNG: - Tính khaùch quan (Objective): A.2 CAÙC KHAÙI NIEÄM: Moät lôùp ñoái töôïng hình thaønh laø xuaát phaùt töø moät chuû theå khaùch quan A.2.1 Lôùp (Class): vôùi nhöõng thuoäc tính vaø haønh vi theå hieän baûn chaát vaø chöùc naêng cuûa noù. Lôùp laø moät taäp hôïp caùc ñoái töôïng coù cuøng moät soá tính chaát khaûo saùt. Caùc Kòch baûn cuûa chöông trình vaän duïng nhöõng yeâu toá khaùch quan naøy moät tính chaát naøy coù theå laø traïng thaùi (thuoäc tính) hay hoaït ñoäng cuûa ñoái töôïng. caùch hôïp lyù ñeå ñaït ñöôïc muïc ñích cuûa chöông trình. Ví duï: - Tính ñoùng goùi (Encapsulation): Lôùp caù laø taäp hôïp bao goàm nhöõng ñoäng vaät coù cuøng ñaëc ñieåm: vaây, mang, Vieäc bao haøm caùc thuoäc tính vaø haønh vi trong ñoái töôïng giuùp ñoái töôïng maùu laïnh vaø coù caùc haønh vi: soáng döôùi nöôùc, thôû baèng mang, ñeû tröùng. coù theå hoaït ñoäng phoái hôïp trong ñoäc laäp vôùi caùc lôùp ñoái töôïng khaùc. A.2.2 Ñoái töôïng (Object): - Tính keá thöøa (Inheritance): Ñoái töôïng laø moät theå hieän cuï theå cuûa lôùp. Moät ñoái töôïng thuoäc lôùp naøo seõ Vieäc ñònh nghóa moät lôùp ñoái töôïng döïa treân caùc lôùp ñoái töôïng ñaõ coù goïi coù nhöõng thuoäc tính, haønh vi cuûa lôùp ñoù. laø söï keá thöøa. Caùc lôùp ñaõ coù goïi laø lôùp cô sôû (based class), lôùp ñöôïc Söï khaùc nhau veà caùch theå hieän thuoäc tính, haønh vi cuûa ñoái töôïng laø cô sôû ñònh nghóa goïi laø lôùp keá thöøa (derived class). Beân caïnh vieäc keá thöøa, phaân bieät ñoái töôïng vôùi caùc ñoái töôïng khaùc trong cuøng moät lôùp. lôùp keá thöøa coù theå ñöôïc boå sung nhöõng haønh vi vaø thuoäc tính caàn thieát A.2.3 Thuoäc tính (Attribute): ñeå phuïc vuï cho nhu caàu môùi phaùt sinh. Cô cheá ñoù ñaõ taïo söï phaùt trieån Thuoäc tính laø giaù trò phaûn aùnh traïng thaùi cuûa ñoái töôïng taïi moät thôøi ñieåm cho öùng duïng maø ñoái töôïng tham gia. xaùc ñònh, giuùp theå hieän ñoái töôïng. Ñoái töôïng coù moät hoaëc nhieàu thuoäc tính. - Tính ña hình (Polymorphism): A.2.4 Haønh vi (Method): Phuï luïc A: Moät soá vaán ñeà laäp trình höôùng ñoái töôïng 235 234 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com
  9. Cô cheá trieån khai nhieàu caùch theå hieän khaùc nhau cho moät haønh vi theo class Teân_lôùp { nguyeân taéc xaây döïng lôùp cô sôû chöùa haønh vi caàn trieån khai vaø caùc lôùp public: keá thöøa. Moãi lôùp keá thöøa seõ phaùt trieån haønh vi ñoù theo moät caùch khaùc [ Khai baùo caùc thuoäc tính, haønh vi kieåu public ] nhau. Moät ñoái töôïng ñaïi dieän lôùp cô sôû seõ ñöôïc kieán taïo töø lôùp keá thöøa protected: phuø hôïp ñeå coù caùch theå hieän haønh vi caàn trieån khai theo yù muoán. Cô [ Khai baùo caùc thuoäc tính, haønh vi kieåu private ] cheá naøy taïo khaû naêng öùng xöû phong phuù cuûa ñoái töôïng. privated: [ Khai baùo caùc thuoäc tính, haønh vi kieåu private ] A.4 PHAÂN LOAÏI THUOÄC TÍNH VAØ HAØNH VI: }; Caùc thuoäc tính vaø haønh vi cuûa ñoái töôïng coù theå ñöôïc chia thaønh ba loaïi: // Phaàn caøi ñaët cuûa lôùp: - Public: Caùc thuoäc tính, haønh vi ñöôïc ñoái töôïng theå hieän beân ngoaøi. kieåu Teân_lôùp::Teân_haønh_vi_1( [ Danh_saùch_tham_soá ] ) { - Protected: Caùc thuoäc tính, haønh vi aån chöùa beân trong ñoái töôïng, hoã trôï … // Caùc xöû lyù trong haønh vi caùc hoaït ñoäng cuûa ñoái töôïng vaø coù theå truyeàn laïi cho caùc } lôùp ñoái töôïng keá thöøa. … - Private: Caùc thuoäc tính, haønh vi aån chöùa beân trong ñoái töôïng, hoã trôï kieåu Teân_lôùp::Teân_haønh_vi_n( [ Danh_saùch_tham_soá ] ) { caùc hoaït ñoäng cuûa ñoái töôïng vaø khoâng theå truyeàn laïi cho … // Caùc xöû lyù trong haønh vi caùc lôùp ñoái töôïng keá thöøa. } A.5 CAÙC HAØNH VI ÑAËC BIEÄT: Noäi dung phaàn khai baùo vaø caøi ñaët cuûa lôùp ñöôïc ñaët trong hai taäp tin - Haønh vi taïo taäp: Haønh vi ñöôïc thöïc hieän ngay khi ñoái töôïng vöøa hình khai baùo (.h) vaø caøi ñaët (.cpp). Trong ñoù: thaønh. Haønh vi naøy duøng ñeå caøi ñaët caùc xöû lyù khôûi - Taäp tin .H : Chöùa toaøn boä phaàn khai baùo cuûa lôùp vaø caùc chæ thò taïo caùc giaù trò thuoäc tính cuûa ñoái töôïng. ñònh höôùng bieân dòch (neáu caàn). Moät lôùp ñoái töôïng coù theå coù moät hoaëc nhieàu haønh - Taäp tin .CPP : Chöùa toaøn boä phaàn caøi ñaët cuûa lôùp. ÔÛ ñaàu taäp tin vi taïo laäp. Teân haønh vi taïo laäp truøng vôùi teân lôùp. Caùc naøy khai baùo chæ thò söû duïng taäp tin .H: haønh vi taïo laäp ñöôïc phaân bieät laãn nhau bôûi caáu truùc #include "Teân_taäp_tin_h_lieân_quan" caùc tham soá cuûa chuùng. - Haønh vi huûy boû: Haønh vi ñöôïc thöïc hieän tröôùc khi ñoái töôïng chaám döùt Thöïc haønh 1: Xeùt baøi toaùn quaûn lyù chuoãi, khoâng gian baøi toaùn laø caùc söï toàn taïi cuûa noù. giaù trò kieåu chuoãi cuûa C caàn quaûn lyù vaø truy xuaát. Moät lôùp ñoái töôïng coù moät haønh vi huûy boû duy Döôùi goùc ñoä OOP, lôùp ñoái töôïng chuoãi giuùp bieåu dieãn chuoãi coù caùc nhaát. Teân haønh vi huûy boû truøng vôùi teân cuûa lôùp thuoäc tính vaø haønh vi nhö sau: nhöng ñöôïc baét ñaàu baèng daáu ‘~’. Haønh vi huûy boû - Thuoäc tính: char* info ñöôïc söû duïng ñeå xin caáp phaùt vuøng nhôù khoâng coù tham soá. chöùa noäi dung chuoãi. Caû haønh vi taïo laäp vaø huûy boû ñeàu khoâng coù kieåu traû veà. - Haønh vi: - Haønh vi taïo laäp vôùi moät tham soá laø giaù trò chuoãi A.6 KHAI BAÙO LÔÙP, ÑOÁI TÖÔÏNG TRONG C++: laøm noäi dung khôûi ñaàu cho ñoái töôïng chuoãi. - Haønh vi huûy boû giaûi phoùng vuøng nhôù info. A.6.1 Khai baùo lôùp: Lôùp ñoái töôïng ñöôïc khai baùo trong C++ nhö sau: - Haønh vi laáy ñòa chæ vuøng chöùa noäi dung chuoãi. Lôùp chuoãi ñöôïc khai baùo trong C++ nhö sau: // Phaàn khai baùo cuûa lôùp: Phuï luïc A: Moät soá vaán ñeà laäp trình höôùng ñoái töôïng 237 236 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com
  10. C++ cho pheùp ñònh nghóa lôùp keá thöøa töø moät hoaëc nhieàu lôùp cô sôû. Cuù // Taäp tin String1.h phaùp thöïc hieän khai baùo naøy nhö sau: class CString1 { public: class Teân_lôùp_keá_thöøa: [ public | private ] Teân_lôùp_cô_sôû1 // Haønh vi taïo laäp CString1 ( char* s ); [, [public | private ] Teân_lôùp_cô_sôû2 [ , … ] // Haønh vi huûy boû ~CString1 ( void ); { char* GetInfo( void ); // Caùc khai baùo boå sung cuûa lôùp keá thöøa … protected: }; char* info; Ñaëc ñieåm keá thöøa qui ñònh möùc ñoä keá thöøa cuûa lôùp keá thöøa töø lôùp cô sôû. }; Coù hai kieåu khaùc nhau cuûa ñaëc ñieåm keá thöøa vaø coù yù nghóa nhö sau: // Taäp tin String1.cpp CString1::CString1( char* s ) { Thuoäc tính lôùp cô sôû Thuoäc tính nhaän ñöôïc cho lôùp keá thöøa info = new char[ strlen( s ) + 1 ]; strcpy( info, s ); public public private } protected protected private CString1::~CString1( ) { delete info; private Khoâng truy xuaát ñöôïc Khoâng truy xuaát ñöôïc } char* CString1::GetInfo( void ) { Ñaëc ñieåm keá thöøa public Private return info; } Ví duï: Khai baùo lôùp CString1B keá thöøa hoaøn toaøn töø lôùp CString1. A.6.2 Khai baùo ñoái töôïng: class CString1B : public CString1 { }; Ñoái töôïng ñöôïc khai baùo nhôø lôùp töông öùng. Lôùp coù theå xem nhö laø moät kieåu döõ lieäu vaø ñoái töôïng chính laø bieán öùng vôùi kieåu ñoù. A.7.1 Keá thöøa haønh vi taïo laäp: Cuù phaùp khai baùo bieán ñoái töôïng trong C++ nhö sau: Moãi haønh vi taïo laäp boå sung cuûa lôùp keá thöøa chæ ñöôïc pheùp söû duïng moät haønh vi taïo laäp duy nhaát töø moät lôùp cô sôû. Khai baùo coù cuù phaùp nhö sau: Teân_lôùp Teân_bieán_ñoái_töôïng( [Danh saùch giaù trò laøm tham soá ] ); Haønh_vi_taïo_laäp_cuûa_lôùp_keá_thöøa( [ Danh saùch thamm soá ] ) : A.6.3 Söû duïng ñoái töôïng trong chöông trình: Haønh_vi_taïo_laäp_cuûa_lôùp_sô_sôû_1( [ Caùc giaù trò thamm soá ] ) Thöïc hieän haønh vi cuûa bieán ñoái töôïng (caùc haønh vi public) nhö sau: [ , Haønh_vi_taïo_laäp_cuûa_lôùp_sô_sôû_2( [ Caùc giaù trò thamm soá ] ) Teân_bieán_ñoái_töôïng.Teân_haønh_vi( [Danh saùch giaù trò laøm tham soá ] ); [,…]]{ // Chöông trình Main.cpp söû duïng lôùp CString1 khai baùo ôû treân. … }; #include "String1.h" void main( void ) { Khi moät ñoái töôïng thuoäc lôùp keá thöøa hình thaønh, xöû lyù trong haønh vi taïo CString1 a( “Vo Van A” ); laäp cuûa lôùp keá thöøa vaø xöû lyù trong caùc haønh vi taïo laäp cuûa caùc lôùp cô sôû maø printf( "Gia tri chuoi luu la: %s ", a.GetInfo() ); lôùp ñaêng kyù keá thöøa seõ ñöôïc thöïc hieän theo thöù töï nhö sau: } Haønh_vi_taïo_laäp_cuûa_lôùp_sô_sôû_1 A.7 KEÁ THÖØA TRONG C++: Phuï luïc A: Moät soá vaán ñeà laäp trình höôùng ñoái töôïng 239 238 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2