Datasystemer og nettverk. M-ED3 2008. Datamodellering. Bruk av HTTP- og FTP-protokoll programmert i C++ Når FTP-server og webserver i Internet Information Server er aktivisert, kan vi utveksle dokument mellom datamaskinene ved hjelp av web-leser (f. eks. Internet Explorer) eller FTP-program (f. eks. WS_ftp) . Dokument som ligg på wwwroot og ftproot og underkatalogar kan då hentast ned og lagrast. Men når dette skal automatiserast, må vi lage eigne skript eller program som brukar http- eller ftp-protokoll til opplasting og nedlasting. Eit ftp-script kan brukast direkte i cmd- eller DOS-vinduet (RUN/cmd). Eksempel: Oppgåve 1 Lag ei lita fil MIFIL.TXT. Lag ei skriptfil i notisbok FTPOPPL.SCR med dette innhald: Open 192.168.4.xxx brukarID passord put MIFIL.TXT quit Her må brukarID og passord vera konfigurert I Internet Information Server (IIS) Manager på mottakarmaskinen. Avtal med ein makker og utveksle IP-adresse, brukarID og passord. Bruk samme konvensjon som før med brukarID = SKSPC00nn-U og passord =SKSPC00nn Køyr skriptet ved at du i DOS-vinduet skriv: ftp –s:FTPOPPL.SCR og fila MIFIL.TXT blir lasta opp til ftproot-katalogen på maskinen med URL 192.168.4.xxx. Vi skal så lage eit Visual Cpp-program som kvar time lastar ned ei fil frå internett og lastar samme fila opp til ein ftp-server. Vi skal kunne velje mellom http-nedlasting og ftp-nedlasting og bruke eit ftp-skript til opplastinga. Funksjonane httpGetFile og ftpGetFile ligg på fila CRobotInternet.cpp. Funksjonane er Public funksjonar i klassen CRobotInternet som er definert på fila CRobotInternet.h. Filene kan lastast ned frå http://sksk.no/Tveita/Program/Datasystemer.htm Studer klassen og noter deg kva som er inndata og utdata til dei to funksjonane som vi skal bruke. Nytt i det programmet som vi skal lage, er også bruk av Timer. Slik skal applikasjonen sjå ut når han er ferdig: Oppgåve 2 1. Start C++ og velg File/New/Project/MFC AppWizzard(EXE) og velg prosjektnamn httpftp 2. Velg Dialogbased og default på resten av step 1 to 6. 3. Build og Execute for å sjå at alt er i orden 4. Lag input-felt for URL, Brukernamn, Passord, Filnamn (på server),Lokaltfilnamn og Tid(mellom kvar nedlasting). Velg Id på felta: IDC_URL, IDC_Bruker, IDC_Passord, IDC_Filnamn, IDC_Lokaltfilnamn og IDC_Tid. 5. Lag ein check-boks for ftp-nedlasting. Velg IDC_ftp 6. Høgreklikk i eitt av felta og velg ClassWizzard/Member Variables og tilordn variablar m_URL, m_Bruker, m_Passord, m_Filnamn, m_Lokaltfilnamn (alle som Cstring) og m_Tid som int og m_ftp som BOOL. 7. Lag ein Knapp som du gir Id: IDC_Oppdater og som du skriv Oppdater på. Velg View/ClassWizzard/Message Maps Object Id = IDC_Oppdater og Message BN_CLICKED Add Function . Godta OnOppdater som funksjonsnamn og velg Edit Code. Skriv inn setningar her som får dataene til å gå frå felta i skjemaet og inn i variablane og evt. endre Timer-innstilling: int GamalTid=m_Tid; UpdateData(TRUE); //Data frå skjema til variablar if(GamalTid!=m_Tid){ KillTimer(1); int millisekund=m_Tid*60000; int installResult=SetTimer(1,millisekund,NULL); if(installResult==0)MessageBox("Kan ikkje installere timer"); } 8. Når programmet startar, blir det køyrt ein funksjon som heiter OnInitDialog(). I den funksjonen startar vi ein timer som vil køyre ein funksjon OnTimer() med jamne mellomrom. Velg View/ClassWizzard/Message Maps Object Id = CHttpftpDialog og Message=WM_INITDIALOG. Velg Edit Function, og etter // TODO: Add extra initialization here Skriv inn programkode: int installResult; installResult=SetTimer(1,60000,NULL); //60000 millisekund if(installResult==0)MessageBox("Kan ikkje installere timer"); m_Tid=1; //Eitt minutt UpdateData(FALSE); //Oppdaterer skjemafelt 9. Når programmet avsluttar, må vi fjerne timeren frå datamaskinen: Velg View/ClassWizzard/Message Maps Object Id = CHttpftpDialog og Message=WM_DESTROY. Velg Edit Function, og etter // TODO: Add your message handler here Skriv inn programkode: KillTimer(1); 10. Så skal vi lage funksjonen OnTimer() : Velg View/ClassWizzard/Message Maps Object Id = CHttpftpDialog og Message=WM_TIMER. Velg Add Function, godta namnet OnTimer() og velg Edit Code og etter linja // TODO: Add your message handler here Skriv inn programkode for alt som skal skje: if(m_ftp){ CString URL=m_Bruker+":"+m_Passord+"@"+m_URL;NULL; CString Dir=""; //Katalog på server int Resultat=0; CString Feilmelding=""; Robot.ftpGetFile(URL,Dir,m_Filnamn,m_Lokaltfilnamn,Resultat,Feilmelding) } else { CString URL=m_URL+"/"+m_Filnamn; int Resultat=0; CString Feilmelding=""; Robot.httpGetFile(URL,m_Lokaltfilnamn,Resultat,Feilmelding); if(Resultat!=0)MessageBox(Feilmelding); } 11. Legg inn ein setning #include "CRobotInternet.cpp" på toppen av fila. Kanskje må du fjerne setninga #include "stdafx.h" frå fila CRobotInternet.cpp for ikkje å få dobbelt opp med den include-setninga. Etter #endif direktivet på toppen av fila, deklarerer du så CRobotInternet Robot ; // Robot er eit objekt av klassen CRobotInternet 12. Kompiler og køyr programmet så langt. 13. Legg inn dei tre siste felta for opplasting av fil. Du kan kopiere dei 3 øverste og gi dei namn IDC_URL2, IDC_Bruker2 og IDC_Passord2 og tilordn variable til alle: m_URL2, m_Bruker2 og m_Passord2. Legg inn kode for å lage eit opplastingsskript og køyre det: 14. Under CHttpftpDlg::OnInitDialog() etter installeringskoden for Timer legg du inn litt ekstra kode for default-adresser: m_Tid=1;//1 minutt m_URL="127.0.0.1"; //Lokal maskin m_Filnamn="index.htm"; //På D:/Inetpub/wwwroot m_Lokaltfilnamn="index.htm"; m_URL2="192.168.4.56"; //LærarPC på datateknisk m_Bruker2="SKSPC0025-U/ftp";//Lagt inn som USER på mappe //Inetpub/ftproot m_Passord2="SKSPC0025";//Lagt inn som passord for bruker SKSPC0025-U/ftp UpdateData…….osv som før 15. Under CHttpftpDlg::OnOppdater() etter oppdateringskoden for Timer: ofstream Utfil; //Lagar opplastingsskript Utfil.open("ftpoppl.scr"); Utfil<<"open "<