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

正文內容

通信協(xié)議與網(wǎng)絡程序設計實驗指導書-文庫吧資料

2025-06-07 00:32本頁面
  

【正文】 源。另外,函數(shù)WSAIsBlocking()可以檢測調用是否阻塞,函數(shù)WSACancelBlockingCall()可以取消一個阻塞的調用。 (3)阻塞處理方法: WINSOCK在調用處于阻塞時進入一個叫“Hook”的例程,它負責處理Windows消息,使得Windows的消息循環(huán)能夠繼續(xù)。 (2)異步請求例程: 異步請求例程允許應用程序用異步方式獲取請求的信息,如WSAAsyncGetXByY()類函數(shù)允許用戶請求異步服務,這些功能在使用標準Berkeley函數(shù)時是阻塞的。 WSAAsyncSelect() 函數(shù)select()的異步版本 WSACancelAsyncRequest() 取消函數(shù)WSAAsyncGetXByY執(zhí)行中的實例 WSACancelBlockingCall() 取消一個執(zhí)行中的“阻塞”API調用 WSACleanup() 終止使用隱含的Windows Sockets DLL WSAGetLastError() 獲取Windows Sockets API的最近錯誤號 WSAIsBlocking() 檢測隱含的Windows Sockets DLL是否阻塞了一個當前線索的調用 WSASetBlockingHook() 設置應用程序自己的“阻塞”處理函數(shù) WSASetLastError() 設置Windows Sockets API的最近錯誤號 WSAStartup() 初始化隱含的Windows Sockets DLL WSAUnhookBlockingHook() 恢復原來的“阻塞”處理函數(shù) 從表1可以看出,WINSOCK的擴充功能可以分為如下幾類: (1)異步選擇機制: 異步選擇函數(shù)WSAAsyncSelect()允許應用程序提名一個或多個感興趣的網(wǎng)絡事件,所有阻塞的網(wǎng)絡I/O例程(如send()和resv()),不管它是已經(jīng)使用還是即將使用,都可作為WSAAsyncSelect()函數(shù)選擇的候選。 WSAAsyncGetServByName() 下表列出了WINSOCK擴充的函數(shù)功能。這個過程也稍顯復雜。第二種,用到了擴展規(guī)范里另一個關于事件的函數(shù)WSAEventSelect(),它是用事件對象的方式來處理Socket事件,也就是,你必須首先用WSACreateEvent()來創(chuàng)建一個事件對象,然后調用WSAEventSelect()來使得Socket的事件和這個事件對象關聯(lián)。 第一種,它常關聯(lián)一個窗口,也就是異步Socket的事件將作為消息發(fā)往該窗口,這是由WinSock擴展規(guī)范里的一個函數(shù)WSAAsyncSelect()來實現(xiàn)和窗口關聯(lián)。,那么程序主要就是要處理事件。 (同步阻塞、異步非阻塞) ,那就是當你從不調用WSAIoctl()和ioctlsocket()來改變Socket IO模式,也從不調用WSAAsyncSelect()和WSAEventSelect()來選擇需要處理的Socket事件。比如調用recv()函數(shù)讀取網(wǎng)絡緩沖區(qū)中數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會一直掛在此函數(shù)調用上。三、 實驗環(huán)境Windows操作系統(tǒng)、VC++四、 實驗指導(一)WinSock的擴充異步方式指的是發(fā)送方不等接收方響應,便接著發(fā)下個數(shù)據(jù)包的通信方式;而同步指發(fā)送方發(fā)出數(shù)據(jù)后,等收到接收方發(fā)回的響應,才發(fā)下一個數(shù)據(jù)包的通信方式。五、實驗報告(必要時應準備多組數(shù)據(jù))(應加適當?shù)淖⑨?,可讀性好)(出錯及解決方法,上機調試的結果和體會)實驗三 TCP套接字編程一、實驗目的通過編寫簡單的Windows窗口、基于MFC的計算器以及車站售票程序(多線程實現(xiàn)),深入了解VC++的開發(fā)環(huán)境,掌握常用的控件使用方法和程序編寫過程。原始式套接字(SOCK_RAW)該接口允許對較低層協(xié)議,如IP、ICMP直接訪問。數(shù)據(jù)包以獨立包形式被發(fā)送,不提供無錯保證,數(shù)據(jù)可能丟失或重復,并且接收順序混亂。數(shù)據(jù)報式套接字(SOCK_DGRAM)內設流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無長度限制。 } (c)套接字類型TCP/IP的socket提供下列三種類型套接字。 /*保留*/ char sin_zero[8]。 /*32位IP地址,網(wǎng)絡字節(jié)順序*/ (協(xié)議,本地地址,本地端口號,遠地地址,遠地端口號)這樣一個五元組,叫做一個相關(association),即兩個協(xié)議相同的半相關才能組合成一個合適的相關,或完全指定組成一連接。因此一個完整的網(wǎng)間通信需要一個五元組來標識:全相關一個完整的網(wǎng)間進程通信需要由兩個進程組成,并且只能使用同一種高層協(xié)議。amp。 (4)出錯處理Windows 提供了一個函數(shù)來獲取最近的錯誤碼 WSAGetLastError(),推薦的編寫方式如下: len = send (s,lpBuffer,len,0)?! ase FD_WRITE:    while(send(wParam,lpBuffer,len,0)!=SOCKET_ERROR)    break。下面我們看一個異步數(shù)據(jù)傳輸實例:假設套接字 s 在連接建立后,已經(jīng)使用了函數(shù) WSAAsyncSelect() 在其上注冊了網(wǎng)絡事件 FD_READ 和 FD_WRITE,并且 wMsg 值為 UM_SOCK,那么我們可以在 Windows 消息循環(huán)中增加如下的分支語句:case UM_SOCK:  switch(lParam)  {  case FD_READ:    len = recv(wParam,lpBuffer,length,0)。 (3)異步數(shù)據(jù)傳輸使用 send() 或 sendto() 函數(shù)來發(fā)送數(shù)據(jù),使用 recv() 或recvfrom() 來接收數(shù)據(jù)。taskHnd = WSAAsyncBetHostByName(hWnd,wMsg,hostname,buf,buflen)。常用結構如下:HANDLE taskHnd。應用程序調用它時,由 Windows Sockets DLL 初始化這一操作并返回調用者,此函數(shù)返回一個異步句柄,用來標識這個操作。(2)異步請求服務Windows Sockets 除支持 Berkeley Sockets 中同步請求,還增加了了一類異步請求服務函數(shù) WSAAsyncGerXByY()。}//Windows Sockets DLL 被進程接受,可以進入下一步操作關閉函數(shù)使用時,任何打開并已連接的 SOCK_STREAM 套接字被復位,但那些已由 closesocket() 函數(shù)關閉的但仍有未發(fā)送數(shù)據(jù)的套接字不受影響,未發(fā)送的數(shù)據(jù)仍將被發(fā)送。//告訴用戶找不到合適的版本}//確認 Windows Sockets DLL 支持 版本//DLL 版本可以高于 //系統(tǒng)返回的版本號始終是最低要求的 ,即應用程序與DLL 中可支持的最低版本號if(LOBYTE()!= 1|| HIBYTE()!=1){  WSACleanup()。wsaData)。 //定義錯誤號變量wVersionRequested = MAKEWORD(1,1)。 // 定義版本信息變量WSADATA wsaData。 其中 wVersionRequested 保證 SOCKETS 可正常運行的 DLL 版本,如果不支持,則返回錯誤信息。啟動函數(shù)必須是第一個使用的函數(shù),而且它允許指定 Windows Sockets API 的版本,并獲得 SOCKETS的特定的一些技術細節(jié)。讓我們一步步慢慢走。 Sockets網(wǎng)絡程序設計核心 我們終于可以開始真正的 Windows Sockets 網(wǎng)絡程序設計了。(WSAGetLastEror()和WSASetLastError())(5)啟動與終止使用函數(shù) WSAStartup() 和 WSACleanup() 啟動和終止套接字。在處理例程中調用 WSACancelBlockingHook()函數(shù)將取消處于阻塞的操作,它將結束阻塞循環(huán)。如果要對復雜程序進行處理,Windows Sockets 中還有 WSASetBlockingHook() 提供用戶安裝自己的阻塞處理例程能力;與該函數(shù)相對應的則是 WSAUnhookBlockingHook(),它用于刪除先前安裝的任何阻塞處理例程,并重新安裝默認的處理例程。我們可以調用 WSACancelBlockingCall() 函數(shù)取消此阻塞操作。在Windows Sockets 實現(xiàn)中,對于不能立即完成的阻塞操作做如下處理:DLL初始化→循環(huán)操作。因此在設計Windows Sockets 程序時,盡管系統(tǒng)支持阻塞操作,但還是反對程序員使用該操作。 (3)阻塞處理方法Windows Sockets 為了實現(xiàn)當一個應用程序的套接字調用處于阻塞時,能夠放棄CPU讓其它應用程序運行,它在調用處于阻塞時便進入一個叫“HOOK”的例程,此例程負責接收和分配WINDOWS消息,使得其它應用程序仍然能夠接收到自己的消息并取得控制權。  如果我們需要注銷對套接字網(wǎng)絡事件的消息發(fā)送,只要將 lEvent 設置為0 (2)異步請求函數(shù)在 Berkeley Sockets 中請求服務是阻塞的,WINDOWS SICKETS 除了支持這一類函數(shù)外,還增加了相應的異步請求函數(shù)(WSAAsyncGetXByY()?! 『瘮?shù)結構如下:  int PASCAL FAR WSAAsyncSelect(SOCKET s,HWND hWnd,unsigned int wMsg,    long lEvent)。  ?。?)異步選擇機制:  Windows Sockets 的異步選擇函數(shù)提供了消息機制的網(wǎng)絡事件選擇,當使用它登記網(wǎng)絡事件發(fā)生時,應用程序相應窗口函數(shù)將收到一個消息,消息中指示了發(fā)生的網(wǎng)絡事件,以及與事件相關的一些信息。運行組件:Windows Sockets 應用程序接口的動態(tài)鏈接庫()。Windows Sockets由兩部分組成:開發(fā)組件和運行組件。Windows Sockets 是從 Berkeley Sockets 擴展而來的,其在繼承 Berkeley Sockets 的基礎上,又進行了新的擴充?! 「袷剑篿nt PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds,   fd_set FAR * exceptfds,const struct timeval FAR * timeout)。否則返回值SOCKET_ERROR。參數(shù)s待關閉的套接字描述符。 關閉套接字──closesocket()closesocket()關閉套接字s,并釋放分配給該套接字的資源;如果s涉及一個打開的TCP連接,則該連接被釋放。timeout指向select()函數(shù)等待的最大時間,如果設為NULL則為阻塞操作。 參數(shù) writefds 指向要做寫檢測的套接字描述符集合的指針。參數(shù)nfds指明被檢查的套接字描述符的值域,此變量一般被忽略。請求給定狀態(tài)的套接字集合由一個fd_set結構指示。 輸入/輸出多路復用──select()select()調用用來檢測一個或多個套接字的狀態(tài)。如果連接被關閉,返回0。flags 指定傳輸控制方式,如是否接收帶外數(shù)據(jù)等。參數(shù)s 為已連接的套接字描述符。否則它返回SOCKET_ERROR。flags 指定傳輸控制方式,如是否發(fā)送帶外數(shù)據(jù)等。參數(shù)s為已連接的本地套接字描述符。常用的系統(tǒng)調用有 send() 和recv()。它在調用socket() 分配一個流套接字,且調用bind()給s賦于一個名字之后調用,而且一定要在accept()之前調用。 listen()在執(zhí)行調用過程中可為沒有調用過bind() 的套接字s完成所必須的連接,并建立長度為backlog的請求連接隊列。如果沒有錯誤發(fā)生,listen()返回0。參數(shù)s標識一個本地已建立、尚未連接的套接字號, 服務器愿意從它上面接收請求。 監(jiān)聽連接──listen()此調用用于面向連接服務器,表明它愿意接收連接。若采用無連接,客戶方必須使用bind()以獲得一個唯一的地址。socket()指定五元組中的協(xié)議元,它的用法與是否為客戶或服務器、是否面向連接無關。新的套接字可用于處理服務器并發(fā)請求。調用前,參數(shù)addr 指向一個初始值為空的地址結構,而 addrlen 的初始值為0; 調用accept() 后,服務器等待從編號為s的套接字上接受客戶連接請求,而連接請求是由客戶方的connect()調用發(fā)出的。 accept()用于面向連接服務器。如果沒有錯誤發(fā)生,accept()返回一個SOC
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1