freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計算機網(wǎng)絡c實驗指導書-資料下載頁

2025-05-14 03:28本頁面
  

【正文】 絡編程者使用,可方便地進行低層的網(wǎng)絡事件通知及信息回叫控制等操作。CSocket類派生于CAsyncSocket,它繼承了父類中一些常用易懂的Windows Sockets API函數(shù),并對CAsyncSocket中低層的較難控制的一些API函數(shù)或成員函數(shù)進行了處理,使得網(wǎng)絡傳輸簡捷易用,同時它支持模塊化的后臺信息處理,解決了CAsyncScoket中較難克服的多線程處理。下面介紹用Visual C++在windows中實現(xiàn)Socket類型成員函數(shù)(這些成員函數(shù)實際上是從CAsyncSocket類繼承來的)。成員函數(shù)和參數(shù)說明:(1)BOOL Create(UNIT nsocketPort=0,int nSocketType=SOCK_STREAM, long lEvent = FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT| FD_CLOSE, LPCTSTR lpszSocketAddress=NULL)該函數(shù)用來建立Socket,如果函數(shù)成功,則返回非零值;否則返回值為0。其中:nSocketPort:為所選擇的socket端口,一般要大于1023,如果該參數(shù)為0,則由系統(tǒng)選定一端口,默認值0。nSocketType:為套接字類型——SOCK_STREAM或SOCK_DGRAM。SOCK_STREAM表示為流套接字(本實驗使用基于TCP連接的流套接字編程),SOCK_DGRAM表示為數(shù)據(jù)報套接字,默認值為SOCK_STREAM。lEvent:標識該Socket要完成哪種工作,默認值為FD_READ|FD_WRITE| FD_OOB| FD_ACCEPT|FD_CONNECT| FD_CLOSE。lpszSocketAddress:一個指向字符串的指針,該字符串包含了被連接套接口的網(wǎng)絡地址。一個帶點的數(shù)據(jù),如“”,默認值為NULL。注意:CSocket中,WinsockAPI的初始化(socket)和綁定(bind)兩部分工作都完成了。(2)BOOL Listen(int nConnectionBacklog=5)該函數(shù)的作用是等待Socket請求,如果調(diào)用成功,則返回非零值;否則返回值為0。Listen僅對那些支持連接的套接字起作用,也就是SOCK_STREAM類型的套接字。在進程應答連接并把它放到等待隊列時,套接字被置成被動模式(passive mode)。本函數(shù)一般由那些一次可以用多個連接的服務器使用(或任何需要接受連接的應用)。nConnectionBacklog:表示等待隊列的長度,默認值為最大值5,有效值為1~5。(3)BOOL Connect(LPCTSTR lpszHostAddress,UINT nHostPort)該函數(shù)的作用是提出連接請求。其中:lpszHostAddress:對象連接的套接字的網(wǎng)絡地址、機器名,或以句點分隔的數(shù)字,如“”。nHostPort:為接受請求進程的網(wǎng)絡地址和Socket端口號。注意:Connect函數(shù)還有另一個版本:BOOL Connect(const SOCKADDR *lpSockAddr, int nSockAddrLen);具體用法可以參閱MSDN Library中關于CAnyscSocket類的闡述。(4)virtual void Close()該函數(shù)的作用是關閉該Socket。三、利用CSocket進行傳輸?shù)妮o助類簡介CSocketFile類CSocketFile繼承自CFile類,用在基于Windows Socket的網(wǎng)絡上傳輸數(shù)據(jù)。首先,將一個建立連接的CSocket對象實例作為參數(shù)進行初始化,然后,將已經(jīng)初始化的CSocket對象連接到CArchive對象上,接著將數(shù)據(jù)串行化,以使用MFC系列來簡化發(fā)送和接受數(shù)據(jù),最終實現(xiàn)利用網(wǎng)絡的Socket傳輸和本機上的流傳輸一樣簡單。成員函數(shù):CSocketFile用到的成員函數(shù)只有構(gòu)造函數(shù)。CSocketFile::CSocketFile(CSocket *pSocket, BOOL bArchiveCompatible= true)。其中:pSocket:連接到CSocketFile對象的套接口。bArchiveCompatible:指示該文件對象是否與一個CArchive對象一起使用。只有當希望在單機方式下來使用這個CSocketFile對象時,才傳遞FALSE。因為僅有CSocketFile類實例本身沒有什么意義,所以通常將其置為TRUE。說明:此成員函數(shù)用來構(gòu)造一個CSocketFile對象。當此對象超出范圍或被刪除時,它的析構(gòu)函數(shù)將使它自己從插槽對象上分離。注意:一個CSocketFile對象也可以在沒有CAchive對象的情況下作為一個(受限制的)文件來使用。缺省情況下,CSocketFile構(gòu)造函數(shù)的bArchiceCompatible參數(shù)是TRUE,它表明此文件對象與一個檔案一起使用。要在沒有檔案的情況下使用該文件對象,則給bArchiceCompatible參數(shù)傳遞FALSE。在“檔案兼容”模式下,一個CSocketFile對象可以提供更好的表現(xiàn),并減少出現(xiàn)“死鎖”的幾率。2 、CArchive類CAchive類沒有基類。CArchive允許以永久二進制(通常為磁盤存儲)的形式保存一個對象的復雜網(wǎng)絡,它可以從永久存儲中裝載對象,并在內(nèi)存中重新構(gòu)造它們。使數(shù)據(jù)永久保留的過程就叫做“串行化”。一般可以把一個CArchive對象看作一個二進制流,可以將它和輸入流iostream類的用法進行比較。CArchive對象一般和一個文件類關聯(lián)(CFile類或CSocketFile類)。輸入輸出流是加工處理ASCII字符,而CArchive類的用處是高效、無冗余地處理二進制數(shù)據(jù)。在CArchive類中,重載了提取()和插入()運算符,它是方便的歸檔編程接口,主要支持CObject派生類。四、MFC CSocket類的通信流程使用CSocket類進行網(wǎng)絡二進制數(shù)據(jù)通信的連接流程,如下表所示:服 務 器 端 注 釋 客 戶 端1CSocket m_server構(gòu)造一個socket對象CSocket m_client。2(nport)創(chuàng)建socket(nport)。3()。聽等連接與服務器建立連接(straddr,nport)。此時阻塞,等待服務器端監(jiān)聽。4CSocket m_receive。(m_receive)。此時阻塞,等待客戶機連接構(gòu)造新的socket對象用以接受客戶端的連接5CSocketFile file(amp。m_server)構(gòu)造一文件對象CSocketFile file(amp。m_server)。6CArchive arin(amp。file,CAchive::load)。CArchive arout(amp。file,CAchive::store)。構(gòu)造流對象CArchive arin(amp。file,CArchive::load)。CArchive arout(amp。file,CArchive::store)。7arinvalue。aroutvalue。用流進行數(shù)據(jù)的傳輸概念和cin,cout相似arinvalue。aroutvalue。注意事項:利用CArchive類進行網(wǎng)絡數(shù)據(jù)傳輸?shù)牟僮鞴倘环奖阒庇^,但是如果編寫的程序是和別人的程序進行通信的話,就要注意對方的程序是否也使用了CArchive類,否則會造成數(shù)據(jù)相互不能識別。五、使用CSocket類的同步問題和解決方法有了上面的理論基礎,就可以自己設計實現(xiàn)網(wǎng)絡通信了??梢宰龅交谧枞l(fā)送和接受二進制數(shù)據(jù)。例如:可以Client端發(fā)送數(shù)據(jù),Server端接收數(shù)據(jù):Server端:m_receive(void *lpBuf, int nBufLen, int nFlags=0);Clietn端:m_client(const void *lpBuf, int nBufLen, int nFlags=0);接著我們再分析一下各個類中提到的常用方法的同步特性:Listen(….):執(zhí)行后無論有無連接,立即返回。Connect(…):如果服務器端有端口正在監(jiān)聽,則立即成功返回,如果沒有,則過幾秒鐘后將顯示無法連接。Accept(…):Listen函數(shù)返回后可以執(zhí)行此函數(shù),但是此函數(shù)是基于阻塞的,只要客戶機connect連接并且端口正確,則立即成功返回并建立連接 ;若遲遲監(jiān)聽不到連接,則不斷阻塞,直到連接成功或者強行關閉。Send(…):調(diào)用后就將數(shù)據(jù)保存在socket緩沖區(qū)中,立即返回。Receive(…):和Accept一樣的阻塞,直到能從socket緩沖區(qū)成功讀取到nBufLen長度的數(shù)據(jù)。按照上述分析,讀者可能會考慮這樣的兩個問題:(1)監(jiān)聽的時候,如果客戶端遲遲沒有連接,則監(jiān)聽方執(zhí)行到Accept則阻塞不能相應。(2)在用Receive接受數(shù)據(jù)時,若遲遲得不到發(fā)送的數(shù)據(jù),也阻塞不能響應。顯然,帶有這兩個問題的軟件是不能被接受的。CSocket類里的OnReceive和OnAccept消息處理函數(shù)(繼承自CAsyncSocket類)可以解決上述兩個問題,其原理是:(1)OnAccept():Listen過后,若監(jiān)聽到客戶機有連接,則產(chǎn)生消息調(diào)用OnAccept(),一般可以在此函數(shù)里面調(diào)用Accept便可避免監(jiān)聽時的阻塞。virtural void OnAccept(int nErrorCode):nErrorCode為套接字上最近的錯誤代碼,此成員函數(shù)可用的錯誤代碼有:0:函數(shù)成功地執(zhí)行并返回。WSAENETDOWN:Windows Socket檢測到網(wǎng)絡系統(tǒng)故障。說明由框架調(diào)用,通知監(jiān)聽套接字現(xiàn)在可以調(diào)用Accept成員函數(shù)來接收掛起的連接請求(有connect請求進入)。(2)OnReceive():建立連接后,若檢測到Socket緩沖區(qū)里有數(shù)據(jù)到達,便自動調(diào)用OnReceive(),在此函數(shù)里面使用Receive接收就可避免接受數(shù)據(jù)的阻塞。virtural void OnReceive(int nErrorCode):nErrorCode為套接字上最近的錯誤代碼,此成員函數(shù)可用的錯誤代碼有:0:函數(shù)成功地執(zhí)行并返回。WSAENETDOWN:Windows Socket檢測到網(wǎng)絡系統(tǒng)故障。說明由框架調(diào)用,通知套接字緩沖區(qū)中有數(shù)據(jù),可以調(diào)用成員函數(shù)Receive取出?!緦嶒瀮?nèi)容與步驟】在上述實驗原理的基礎上,以點對點通信的聊天程序為例實現(xiàn)網(wǎng)絡通信,客戶機/服務器模式是socket點對點網(wǎng)絡程序的典型模式。使用的面向連接的TCP連接套接字是MFC的典型方式。其實現(xiàn)步驟為:創(chuàng)建兩個對話框程序,分別為服務器端和客戶端;啟動服務器端程序;創(chuàng)建套接字后等待客戶的連接;客戶啟動,創(chuàng)建套接字,然后和服務器連接;連接建立后,客戶機和服務器可以通過建立的套接字連接進行信息通信。【分析與思考】本聊天工具可以實現(xiàn)一對多的通話嗎?如果沒有,嘗試添加。參考文獻1 2 錢朝陽,吳偉,3 .
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1