網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)書_第1頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)書_第2頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)書_第3頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)書_第4頁
網(wǎng)絡(luò)編程實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

R232/485IternetTCP/PWinokAIMFCWinsockUP本實(shí)驗(yàn)指導(dǎo)書將介紹一些網(wǎng)絡(luò)編程和Winsock控件知識(shí),用VC++實(shí)現(xiàn)網(wǎng)絡(luò)間的168實(shí)驗(yàn)一網(wǎng)絡(luò)編程相關(guān)知識(shí)的介紹及學(xué)網(wǎng)絡(luò)程序設(shè)計(jì)原(1)(2)下圖是TCP/IP協(xié)議與應(yīng)用程序關(guān)系圖Windows網(wǎng)絡(luò)編程的事實(shí)上的標(biāo)準(zhǔn)。它以Unix中流行的Socket接口為范例定義了一套Windows下網(wǎng)絡(luò)編程接口函數(shù)庫。它不僅包含了人們所熟悉的BerkeleySocketWindowsWindows有SOCKET接口的計(jì)算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過這個(gè)VC++對(duì)原來的WindowsSockets庫函數(shù)進(jìn)行了一系列封裝,繼而產(chǎn)生了VCWINSOCKAPIWINSOCK.HWINSOCKAPIWSOCK32.LIB:WINSOCKAPI總的來說,使用SOCKET接口(面向連接或無連接)進(jìn)行網(wǎng)絡(luò)通信時(shí),必須按下SOCKETSOCKETWINSOCKAPIWSAStartup():連結(jié)應(yīng)用程序與WindowsSocketsDLL的第一個(gè)函數(shù)。說明:此函數(shù)是應(yīng)用程序調(diào)用WindowsSocketsDLLWindowsSocketsDLLWSACleanup(WindowsSocketsDLLWindowsSocketsDLLSocket描述字,并為此Socket建立其所使用Socketlisten():設(shè)定Socket為狀態(tài),準(zhǔn)備被連接說明:此函數(shù)在服務(wù)程序上使用,來設(shè)定Socket進(jìn)入狀態(tài),并設(shè)定最5,acceptaccept()SocketSocket的信息傳遞接收,而原來Socket仍然可以接收其他客戶端的連接要求。說明:oketrecvSocketSocketsendSocketSocketWSAAsyncSelect():要求某一Socket有(event)發(fā)生時(shí)通知使說明:此函數(shù)用來請求WindowsSocketsDLL為窗口句柄消息-無論它何時(shí)檢測到由lEvent參數(shù)指明的網(wǎng)絡(luò)。要發(fā)送的消息由wMsg參數(shù)s 欲接收讀準(zhǔn)備好。 欲接收寫準(zhǔn)備好。 欲接收帶邊數(shù)據(jù)到達(dá)。 欲接收將要連接。FD_CONNECT欲接收已連接好。 欲接收套接口關(guān)閉。實(shí)驗(yàn)二UDP信程序的編UDPWinSockUDPUDP協(xié)議是英文UserDatagramProtocol的縮寫,即用戶數(shù)據(jù)報(bào)協(xié)議,主要用來支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)會(huì)議系統(tǒng)在內(nèi)的眾UDPUDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)報(bào)的形式。一個(gè)典型的數(shù)據(jù)8個(gè)字節(jié)用來包含報(bào)頭信息,UDP協(xié)議使用端為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP據(jù)接收一方則通過目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或使用兩個(gè)字節(jié)存放端,所以端的有效范圍是從0到65535。一般來說,大于49151的端都代表動(dòng)態(tài)端口。8192報(bào)在傳輸過程中被第篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方UDPTCP協(xié)議是不同UDPUDPTCP應(yīng)用簡單得多。WinSockUDP(用戶數(shù)據(jù)報(bào)協(xié)議)UDP發(fā)送和接收方處于相同的地位沒有主次之分。利用CSocket無連接的數(shù)據(jù)發(fā)送,首先生成一個(gè)本地套接口(SOCK_DGRAM),然后利用intCAsyncSocket::SendTo(constvoid*lpBuf,intnBufLen,UINTnHostPort,LPCTSTRlpszHostAddressNULL,intnFlags0intCAsyncSocket::ReceiveFrom(void*lpBuf,intnBufLen,CString&rSocketAddress,UINT&rSocketPort,intnFlags=0)接收數(shù)據(jù)。利用UDP協(xié)議發(fā)送和接收都可以是雙向的,就是說任何一個(gè)主機(jī)都可以發(fā)送和接收數(shù)據(jù)。但是UDP協(xié)議是無連接的,所以發(fā)送的數(shù)據(jù)不一定能被接收,此外接收BOOLCMy62_s1_{m_sockSend.Create(6800,SOCK_DGRAM,NULLm_sockSend.Bind(6800,"");//綁定本地套接口SetTimer(1,3000,NULL);//創(chuàng)建一個(gè)定時(shí)器定時(shí)發(fā)送}voidCMy62_s1_Dlg::OnTimer(UINT{staticiIndex=0;charintiSend=m_sockSend.SendTo(szSend,10,6801,"",0UDPTRACE("sent%d}BOOL{m_sockRecv.Bind(6801,"");//綁定本地套接口SetTimer(1,3000,NULL);//創(chuàng)建一個(gè)定時(shí)器定時(shí)}voidCMy62_s1_serverDlg::OnTimer(UINT{charCStringszIP("");UINTuPort=6800;intiRecv=m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);UDPTRACE("received%d}實(shí)驗(yàn)TCP信程序的編TCPWinSockTCPTCP(TransferControlProtocol)是傳輸控制協(xié)議的簡稱,是基于連接的協(xié)TCPTCPTCPCPIP,TCPIP協(xié)議提PTCP的上面就是應(yīng)用程序,下面是IP協(xié)議,上層接口包括一系列類似于操作系統(tǒng)中斷的調(diào)用。對(duì)于上層應(yīng)用程序來說,TCP應(yīng)該能夠異步傳送數(shù)據(jù)。下層接口假定為IP協(xié)議接口。為了在并不可靠的網(wǎng)絡(luò)上實(shí)現(xiàn)面向連接的可靠的傳送數(shù)據(jù),TCP必多個(gè)應(yīng)用程序提供數(shù)據(jù),同時(shí)TCP必須解決連接問題,這樣TCP才能稱得上是面向連接的,最后,TCP數(shù)據(jù)傳送到目的TCP是通過將TCP包打包在IP包內(nèi)在網(wǎng)絡(luò)上傳送達(dá)到TCP的主機(jī)上,TCP可以被看成是一個(gè)模塊,和文件系統(tǒng)區(qū)別不大,TCP也可以調(diào)用一些操作系統(tǒng)的功能,TCP不直接和網(wǎng)絡(luò)打交道,控制網(wǎng)絡(luò)的任務(wù)TCP協(xié)議的結(jié)構(gòu)。TCPWinSock提供了對(duì)TCP(傳輸控制協(xié)議)的支持,通過TCP協(xié)議可以與指定IP地址的主機(jī)建立,同時(shí)利用建立的連接可以雙向的交換數(shù)據(jù)。利用CSocket有一方(客戶方)的連接請求,所以服務(wù)器方需要建立一個(gè)套接口,然后在此套服務(wù)器方在端口6802上等待連接,當(dāng)連接建立后關(guān)閉套接口6802BOOL{CSocketsockListen;sockListen.Accept(m_sockSendm_sockSendsockListen.Close();//關(guān)閉套接SetTimer(1,3000,NULL}voidCMy63_s1_serverDlg::OnTimer(UINT{}

staticiIndex=0;charintiSend=m_sockSend.Send(szSend,10,0TCPBOOLCMy63_s1_{}

BOOLfC=m_sockRecv.Connect("",6802);TRACE("connectis%s\n",(fC)?"OK":"Error");SetTimer(1,3000,NULL);//啟動(dòng)定時(shí)器,定時(shí)接收數(shù)據(jù)voidCMy63_s1_Dlg::OnTimer(UINT{charintiRecv=m_sockRecv.Receive(szRecv,10,0);TCPTRACE("received%dbyte\n",iRecv);{}建立TCP服務(wù)器程序,端口的信實(shí)驗(yàn)四FTP序的實(shí)FTPFTP是TC/IPFileTranferrotool的縮Intert用計(jì)算機(jī),使介質(zhì)對(duì)用戶透明和可靠高效地傳送簡單的FTP就完成兩算機(jī)之拷貝從計(jì)算貝文件至自己的計(jì)算機(jī)上,稱之為“(downlad)”文件。若將文件從自己計(jì)機(jī)中拷貝至計(jì)算則稱“上upoa文在TCPIP協(xié)議中FTP標(biāo)準(zhǔn)命令TP端為21,Port式數(shù)據(jù)為20。FTPFTPFTP機(jī)能通過ftp協(xié)議,并且能Internet,就可以用ftp命令來傳輸文件。每種操作系統(tǒng)使用上有某一些細(xì)微差別,但是每種協(xié)議基本令結(jié)構(gòu)是相同的。ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在機(jī)器上運(yùn)行的不是UNIX,當(dāng)文件傳輸時(shí)ftp通常會(huì)自動(dòng)地調(diào)整文件的內(nèi)容以便于把文件解釋成另外那臺(tái)計(jì)算機(jī)文本文件的格式。binary命令告訴ftp是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒意義的。例如,macintoshWindowsFTP支持工作兩種模式,式叫做Standard(也就是PORT方式,主動(dòng)方式),一種是Passive(也就是PASV,方式)。Standard模式FTP的客戶端發(fā)送PORT命令到FTPPassiveFTPPASV命令到FTPPortFTP客戶端首先和FTP服務(wù)TCP21建立連接,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令。PORT命令TCP20FTPserverPassive模式在建立控制通道的時(shí)候和Standard模式類似,但建立連接后發(fā)送的不是Port命令PasvFTP務(wù)器收到Pasv命令后,隨機(jī)打開一個(gè)高端端口(端大于1024)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請求,客戶端連接FTP服務(wù)器此端口,然后FTP服務(wù)器將通過這個(gè)端口進(jìn)行數(shù)據(jù)的傳送,這個(gè)時(shí)FTPserverFTP協(xié)議使用兩條單獨(dú)的TCP連接,一條于發(fā)送FTP命令,另一條則于傳遞數(shù)據(jù)。初始建立連接時(shí),服務(wù)器在21號(hào)端口上接收來自客戶端令連接。當(dāng)需要傳送數(shù)據(jù)時(shí)(文件列表、文件數(shù)據(jù)等),Port令,并進(jìn)入狀態(tài),等待來自服務(wù)器的數(shù)據(jù)連接請求。FTPCInternetSessionCInterSessionInternet(session),并描述與服務(wù)器的連接(如果有必要的話),如果在程序運(yùn)行期InternetCInternetSessionCWinAppMFC中的類CFtpConnection管理與Internet服務(wù)器的連接,并直接操作服務(wù) 和文件,F(xiàn)TP是MFC的WinInet支持的三個(gè)Internet功能之一,需要先創(chuàng)建一個(gè)CInternetSession實(shí)例和一個(gè)CFtpConnection對(duì)象就可以實(shí)現(xiàn)和一個(gè)FTP服務(wù)器的通信,不需要直接創(chuàng)建CFtpConnection對(duì)象,而是通過調(diào)用CInternetSession::GetFtpConnection來完成這項(xiàng)工作。它創(chuàng)建CFtpConnectionCInternetSession(LPCTSTRpstrAgent,DWORDdwConText,DWORDdwAccessType,LPCTSTRpstrName,LPCTSTRpstrBypass,DWORDInternetdwFlagsINTERNET_FLAG_ASYNC,那末從這個(gè)句柄派生的InternetCInternetSessionCFtpConnection*CIternetSession::GetFtpConnection(LPCTSTRpstrServer,LPCTSTRpstrUserName,LPCTSTRpstrPassword,INTERNET_PORTnPort,BOOLbPassive);CInternetExceptionBOOLGetFile(LPCTSTRpstrRemoteFile,LPCTSTRpstrLocalFile,BOOLbFailExists,DWORDdwAttributes,DWORDdwFlags,DWORDdwContext);上。GetFile(FTPdwFlagsFILE_TRANSFER_TYPE_ASCII,WindowspstrRemoteFile和pstrLocalFile可以是相對(duì)于當(dāng)前 dwContextCFtpConnectionCFtpConnectionWin32GetLastError(),確認(rèn)出錯(cuò)的原因。BOOLPutFile(LPCTSTRpstrLocalFile,LPCTSTRpstrRemoveFile,DWORDdwFlags,DWORDdwContext);FTPPutFile()函數(shù)是一個(gè)比較OpenFileCInternet::Write。利用自己選擇的值來取代dwContextCInternetSessionCFtpConnectionWin32GetLastError(),確認(rèn)出錯(cuò)的原因。FTP實(shí)驗(yàn)五網(wǎng)絡(luò)文件傳WinSock送文件的請求,文件的名稱、大小等,采用MFC所提供的CSocket類的串行化技術(shù)CScktCesageclassCMessage:public{voidSerialize(CArchive&ar);CMessage(intCMessage(intnType,CStringstrFileName,DWORDdwFileSize);virtual~CMessage();intCStringm_strFileName;DWORDm_dwFileSize;負(fù)責(zé)管理的套接字類CListenSocket。使用ClassView或ClassWizard進(jìn)CListenSocket(CFileTransfersDlg*pdlgMain);CFileTransfersDlg*CListenSocket(CFileTransfersDlg*pdlgMain)CSocketclassCSocket:public{//Attributes//OperationsCvirtual~C//OverridesCSocketFile*m_pFile;CArchive*m_pArchiveIn;CArchive*m_pArchiveOut;voidInit();voidBOOLSendMsg(CMessage*pMsg);voidReceiveMsg(CMessage*pMsg);CSocket(CFileTransfersDlg*//ClassWizardgeneratedvirtualfunctionvirtualvoidOnReceive(int//Generatedmessagemap//{{AFX_MSG(C//NOTE-theClassWizardwilladdandremovemember//ImplementationCFileTransfer

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論