網(wǎng)絡編程實驗指導書_第1頁
網(wǎng)絡編程實驗指導書_第2頁
網(wǎng)絡編程實驗指導書_第3頁
網(wǎng)絡編程實驗指導書_第4頁
網(wǎng)絡編程實驗指導書_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

R232/485IternetTCP/PWinokAIMFCWinsockUP本實驗指導書將介紹一些網(wǎng)絡編程和Winsock控件知識,用VC++實現(xiàn)網(wǎng)絡間的168實驗一網(wǎng)絡編程相關(guān)知識的介紹及學網(wǎng)絡程序設(shè)計原(1)(2)下圖是TCP/IP協(xié)議與應用程序關(guān)系圖Windows網(wǎng)絡編程的事實上的標準。它以Unix中流行的Socket接口為范例定義了一套Windows下網(wǎng)絡編程接口函數(shù)庫。它不僅包含了人們所熟悉的BerkeleySocketWindowsWindows有SOCKET接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個VC++對原來的WindowsSockets庫函數(shù)進行了一系列封裝,繼而產(chǎn)生了VCWINSOCKAPIWINSOCK.HWINSOCKAPIWSOCK32.LIB:WINSOCKAPI總的來說,使用SOCKET接口(面向連接或無連接)進行網(wǎng)絡通信時,必須按下SOCKETSOCKETWINSOCKAPIWSAStartup():連結(jié)應用程序與WindowsSocketsDLL的第一個函數(shù)。說明:此函數(shù)是應用程序調(diào)用WindowsSocketsDLLWindowsSocketsDLLWSACleanup(WindowsSocketsDLLWindowsSocketsDLLSocket描述字,并為此Socket建立其所使用Socketlisten():設(shè)定Socket為狀態(tài),準備被連接說明:此函數(shù)在服務程序上使用,來設(shè)定Socket進入狀態(tài),并設(shè)定最5,acceptaccept()SocketSocket的信息傳遞接收,而原來Socket仍然可以接收其他客戶端的連接要求。說明:oketrecvSocketSocketsendSocketSocketWSAAsyncSelect():要求某一Socket有(event)發(fā)生時通知使說明:此函數(shù)用來請求WindowsSocketsDLL為窗口句柄消息-無論它何時檢測到由lEvent參數(shù)指明的網(wǎng)絡。要發(fā)送的消息由wMsg參數(shù)s 欲接收讀準備好。 欲接收寫準備好。 欲接收帶邊數(shù)據(jù)到達。 欲接收將要連接。FD_CONNECT欲接收已連接好。 欲接收套接口關(guān)閉。實驗二UDP信程序的編UDPWinSockUDPUDP協(xié)議是英文UserDatagramProtocol的縮寫,即用戶數(shù)據(jù)報協(xié)議,主要用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡應用。包括網(wǎng)絡會議系統(tǒng)在內(nèi)的眾UDPUDP協(xié)議的主要作用是將網(wǎng)絡數(shù)據(jù)流量壓縮成數(shù)據(jù)報的形式。一個典型的數(shù)據(jù)8個字節(jié)用來包含報頭信息,UDP協(xié)議使用端為不同的應用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP據(jù)接收一方則通過目標端口接收數(shù)據(jù)。有的網(wǎng)絡應用只能使用預先為其預留或使用兩個字節(jié)存放端,所以端的有效范圍是從0到65535。一般來說,大于49151的端都代表動態(tài)端口。8192報在傳輸過程中被第篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方UDPTCP協(xié)議是不同UDPUDPTCP應用簡單得多。WinSockUDP(用戶數(shù)據(jù)報協(xié)議)UDP發(fā)送和接收方處于相同的地位沒有主次之分。利用CSocket無連接的數(shù)據(jù)發(fā)送,首先生成一個本地套接口(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ā)送和接收都可以是雙向的,就是說任何一個主機都可以發(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)建一個定時器定時發(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)建一個定時器定時}voidCMy62_s1_serverDlg::OnTimer(UINT{charCStringszIP("");UINTuPort=6800;intiRecv=m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);UDPTRACE("received%d}實驗TCP信程序的編TCPWinSockTCPTCP(TransferControlProtocol)是傳輸控制協(xié)議的簡稱,是基于連接的協(xié)TCPTCPTCPCPIP,TCPIP協(xié)議提PTCP的上面就是應用程序,下面是IP協(xié)議,上層接口包括一系列類似于操作系統(tǒng)中斷的調(diào)用。對于上層應用程序來說,TCP應該能夠異步傳送數(shù)據(jù)。下層接口假定為IP協(xié)議接口。為了在并不可靠的網(wǎng)絡上實現(xiàn)面向連接的可靠的傳送數(shù)據(jù),TCP必多個應用程序提供數(shù)據(jù),同時TCP必須解決連接問題,這樣TCP才能稱得上是面向連接的,最后,TCP數(shù)據(jù)傳送到目的TCP是通過將TCP包打包在IP包內(nèi)在網(wǎng)絡上傳送達到TCP的主機上,TCP可以被看成是一個模塊,和文件系統(tǒng)區(qū)別不大,TCP也可以調(diào)用一些操作系統(tǒng)的功能,TCP不直接和網(wǎng)絡打交道,控制網(wǎng)絡的任務TCP協(xié)議的結(jié)構(gòu)。TCPWinSock提供了對TCP(傳輸控制協(xié)議)的支持,通過TCP協(xié)議可以與指定IP地址的主機建立,同時利用建立的連接可以雙向的交換數(shù)據(jù)。利用CSocket有一方(客戶方)的連接請求,所以服務器方需要建立一個套接口,然后在此套服務器方在端口6802上等待連接,當連接建立后關(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);//啟動定時器,定時接收數(shù)據(jù)voidCMy63_s1_Dlg::OnTimer(UINT{charintiRecv=m_sockRecv.Receive(szRecv,10,0);TCPTRACE("received%dbyte\n",iRecv);{}建立TCP服務器程序,端口的信實驗四FTP序的實FTPFTP是TC/IPFileTranferrotool的縮Intert用計算機,使介質(zhì)對用戶透明和可靠高效地傳送簡單的FTP就完成兩算機之拷貝從計算貝文件至自己的計算機上,稱之為“(downlad)”文件。若將文件從自己計機中拷貝至計算則稱“上upoa文在TCPIP協(xié)議中FTP標準命令TP端為21,Port式數(shù)據(jù)為20。FTPFTPFTP機能通過ftp協(xié)議,并且能Internet,就可以用ftp命令來傳輸文件。每種操作系統(tǒng)使用上有某一些細微差別,但是每種協(xié)議基本令結(jié)構(gòu)是相同的。ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調(diào)整文件的內(nèi)容以便于把文件解釋成另外那臺計算機文本文件的格式。binary命令告訴ftp是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintoshWindowsFTP支持工作兩種模式,式叫做Standard(也就是PORT方式,主動方式),一種是Passive(也就是PASV,方式)。Standard模式FTP的客戶端發(fā)送PORT命令到FTPPassiveFTPPASV命令到FTPPortFTP客戶端首先和FTP服務TCP21建立連接,通過這個通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時候在這個通道上發(fā)送PORT命令。PORT命令TCP20FTPserverPassive模式在建立控制通道的時候和Standard模式類似,但建立連接后發(fā)送的不是Port命令PasvFTP務器收到Pasv命令后,隨機打開一個高端端口(端大于1024)并且通知客戶端在這個端口上傳送數(shù)據(jù)的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口進行數(shù)據(jù)的傳送,這個時FTPserverFTP協(xié)議使用兩條單獨的TCP連接,一條于發(fā)送FTP命令,另一條則于傳遞數(shù)據(jù)。初始建立連接時,服務器在21號端口上接收來自客戶端令連接。當需要傳送數(shù)據(jù)時(文件列表、文件數(shù)據(jù)等),Port令,并進入狀態(tài),等待來自服務器的數(shù)據(jù)連接請求。FTPCInternetSessionCInterSessionInternet(session),并描述與服務器的連接(如果有必要的話),如果在程序運行期InternetCInternetSessionCWinAppMFC中的類CFtpConnection管理與Internet服務器的連接,并直接操作服務 和文件,F(xiàn)TP是MFC的WinInet支持的三個Internet功能之一,需要先創(chuàng)建一個CInternetSession實例和一個CFtpConnection對象就可以實現(xiàn)和一個FTP服務器的通信,不需要直接創(chuàng)建CFtpConnection對象,而是通過調(diào)用CInternetSession::GetFtpConnection來完成這項工作。它創(chuàng)建CFtpConnectionCInternetSession(LPCTSTRpstrAgent,DWORDdwConText,DWORDdwAccessType,LPCTSTRpstrName,LPCTSTRpstrBypass,DWORDInternetdwFlagsINTERNET_FLAG_ASYNC,那末從這個句柄派生的InternetCInternetSessionCFtpConnection*CIternetSession::GetFtpConnection(LPCTSTRpstrServer,LPCTSTRpstrUserName,LPCTSTRpstrPassword,INTERNET_PORTnPort,BOOLbPassive);CInternetExceptionBOOLGetFile(LPCTSTRpstrRemoteFile,LPCTSTRpstrLocalFile,BOOLbFailExists,DWORDdwAttributes,DWORDdwFlags,DWORDdwContext);上。GetFile(FTPdwFlagsFILE_TRANSFER_TYPE_ASCII,WindowspstrRemoteFile和pstrLocalFile可以是相對于當前 dwContextCFtpConnectionCFtpConnectionWin32GetLastError(),確認出錯的原因。BOOLPutFile(LPCTSTRpstrLocalFile,LPCTSTRpstrRemoveFile,DWORDdwFlags,DWORDdwContext);FTPPutFile()函數(shù)是一個比較OpenFileCInternet::Write。利用自己選擇的值來取代dwContextCInternetSessionCFtpConnectionWin32GetLastError(),確認出錯的原因。FTP實驗五網(wǎng)絡文件傳WinSock送文件的請求,文件的名稱、大小等,采用MFC所提供的CSocket類的串行化技術(shù)CScktCesageclassCMessage:public{voidSerialize(CArchive&ar);CMessage(intCMessage(intnType,CStringstrFileName,DWORDdwFileSize);virtual~CMessage();intCStringm_strFileName;DWORDm_dwFileSize;負責管理的套接字類CListenSocket。使用ClassView或ClassWizard進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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論