青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

道。道。道

安全特性不等于安全的特性

   :: 首頁 :: 聯系 :: 聚合  :: 管理

常用鏈接

搜索

  •  

最新評論

一、簡介

  Windows Sockets 是從 Berkeley Sockets 擴展而來的,其在繼承 Berkeley Sockets 的基礎上,又進行了新的擴充。這些擴充主要是提供了一些異步函數,并增加了符合WINDOWS消息驅動特性的網絡事件異步選擇機制。

  Windows Sockets由兩部分組成:開發組件和運行組件。

  開發組件:Windows Sockets 實現文檔、應用程序接口(API)引入庫和一些頭文件。

  運行組件:Windows Sockets 應用程序接口的動態鏈接庫(WINSOCK.DLL)。

  二、主要擴充說明

  1、異步選擇機制:

  Windows Sockets 的異步選擇函數提供了消息機制的網絡事件選擇,當使用它登記網絡事件發生時,應用程序相應窗口函數將收到一個消息,消息中指示了發生的網絡事件,以及與事件相關的一些信息。

  Windows Sockets 提供了一個異步選擇函數 WSAAsyncSelect(),用它來注冊應用程序感興趣的網絡事件,當這些事件發生時,應用程序相應的窗口函數將收到一個消息。

  函數結構如下:

int PASCAL FAR WSAAsyncSelect(SOCKET s,HWND hWnd,unsigned int wMsg,long lEvent);

  參數說明:

   hWnd:窗口句柄

   wMsg:需要發送的消息

   lEvent:事件(以下為事件的內容)

值:含義:
FD_READ期望在套接字上收到數據(即讀準備好)時接到通知
FD_WRITE期望在套接字上可發送數據(即寫準備好)時接到通知
FD_OOB期望在套接字上有帶外數據到達時接到通知
FD_ACCEPT期望在套接字上有外來連接時接到通知
FD_CONNECT期望在套接字連接建立完成時接到通知
FD_CLOSE期望在套接字關閉時接到通知

  例如:我們要在套接字讀準備好或寫準備好時接到通知,語句如下:

rc=WSAAsyncSelect(s,hWnd,wMsg,FD_READ|FD_WRITE);

  如果我們需要注銷對套接字網絡事件的消息發送,只要將 lEvent 設置為0

  2、異步請求函數

  在 Berkeley Sockets 中請求服務是阻塞的,WINDOWS SICKETS 除了支持這一類函數外,還增加了相應的異步請求函數(WSAAsyncGetXByY();)。

  3、阻塞處理方法

  Windows Sockets 為了實現當一個應用程序的套接字調用處于阻塞時,能夠放棄CPU讓其它應用程序運行,它在調用處于阻塞時便進入一個叫“HOOK”的例程,此例程負責接收和分配WINDOWS消息,使得其它應用程序仍然能夠接收到自己的消息并取得控制權。

  WINDOWS 是非搶先的多任務環境,即若一個程序不主動放棄其控制權,別的程序就不能執行。因此在設計Windows Sockets 程序時,盡管系統支持阻塞操作,但還是反對程序員使用該操作。但由于 SUN 公司下的 Berkeley Sockets 的套接字默認操作是阻塞的,WINDOWS 作為移植的 SOCKETS 也不可避免對這個操作支持。

  在Windows Sockets 實現中,對于不能立即完成的阻塞操作做如下處理:DLL初始化→循環操作。在循環中,它發送任何 WINDOWS 消息,并檢查這個 Windows Sockets 調用是否完成,在必要時,它可以放棄CPU讓其它應用程序執行(當然使用超線程的CPU就不會有這個麻煩了^_^)。我們可以調用 WSACancelBlockingCall() 函數取消此阻塞操作。

  在 Windows Sockets 中,有一個默認的阻塞處理例程 BlockingHook() 簡單地獲取并發送 WINDOWS 消息。如果要對復雜程序進行處理,Windows Sockets 中還有 WSASetBlockingHook() 提供用戶安裝自己的阻塞處理例程能力;與該函數相對應的則是 SWAUnhookBlockingHook(),它用于刪除先前安裝的任何阻塞處理例程,并重新安裝默認的處理例程。請注意,設計自己的阻塞處理例程時,除了函數 WSACancelBlockingHook() 之外,它不能使用其它的 Windows Sockets API 函數。在處理例程中調用 WSACancelBlockingHook()函數將取消處于阻塞的操作,它將結束阻塞循環。

  4、出錯處理

  Windows Sockets 為了和以后多線程環境(WINDOWS/UNIX)兼容,它提供了兩個出錯處理函數來獲取和設置當前線程的最近錯誤號。(WSAGetLastEror()和WSASetLastError())

  5、啟動與終止

  使用函數 WSAStartup() 和 WSACleanup() 啟動和終止套接字。

三、Windows Sockets網絡程序設計核心

  我們終于可以開始真正的 Windows Sockets 網絡程序設計了。不過我們還是先看一看每個 Windows Sockets 網絡程序都要涉及的內容。讓我們一步步慢慢走。

  1、啟動與終止

  在所有 Windows Sockets 函數中,只有啟動函數 WSAStartup() 和終止函數 WSACleanup() 是必須使用的。

  啟動函數必須是第一個使用的函數,而且它允許指定 Windows Sockets API 的版本,并獲得 SOCKETS的特定的一些技術細節。本結構如下:

int PASCAL FAR WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

  其中 wVersionRequested 保證 SOCKETS 可正常運行的 DLL 版本,如果不支持,則返回錯誤信息。
我們看一下下面這段代碼,看一下如何進行 WSAStartup() 的調用

WORD wVersionRequested;// 定義版本信息變量
WSADATA wsaData;//定義數據信息變量
int err;//定義錯誤號變量
wVersionRequested = MAKEWORD(1,1);//給版本信息賦值
err = WSAStartup(wVersionRequested, &wsaData);//給錯誤信息賦值
if(err!=0)
{
return;//告訴用戶找不到合適的版本
}
//確認 Windows Sockets DLL 支持 1.1 版本
//DLL 版本可以高于 1.1
//系統返回的版本號始終是最低要求的 1.1,即應用程序與DLL 中可支持的最低版本號
if(LOBYTE(wsaData.wVersion)!= 1|| HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();//告訴用戶找不到合適的版本
return;
}
//Windows Sockets DLL 被進程接受,可以進入下一步操作

  關閉函數使用時,任何打開并已連接的 SOCK_STREAM 套接字被復位,但那些已由 closesocket() 函數關閉的但仍有未發送數據的套接字不受影響,未發送的數據仍將被發送。程序運行時可能會多次調用 WSAStartuo() 函數,但必須保證每次調用時的 wVersionRequested 的值是相同的。

  2、異步請求服務

  Windows Sockets 除支持 Berkeley Sockets 中同步請求,還增加了了一類異步請求服務函數 WSAAsyncGerXByY()。該函數是阻塞請求函數的異步版本。應用程序調用它時,由 Windows Sockets DLL 初始化這一操作并返回調用者,此函數返回一個異步句柄,用來標識這個操作。當結果存儲在調用者提供的緩沖區,并且發送一個消息到應用程序相應窗口。常用結構如下:

HANDLE taskHnd;
char hostname="rs6000";
taskHnd = WSAAsyncBetHostByName(hWnd,wMsg,hostname,buf,buflen);

  需要注意的是,由于 Windows 的內存對像可以設置為可移動和可丟棄,因此在操作內存對象是,必須保證 WIindows Sockets DLL 對象是可用的。

  3、異步數據傳輸

  使用 send() 或 sendto() 函數來發送數據,使用 recv() 或recvfrom() 來接收數據。Windows Sockets 不鼓勵用戶使用阻塞方式傳輸數據,因為那樣可能會阻塞整個 Windows 環境。下面我們看一個異步數據傳輸實例:

  假設套接字 s 在連接建立后,已經使用了函數 WSAAsyncSelect() 在其上注冊了網絡事件 FD_READ 和 FD_WRITE,并且 wMsg 值為 UM_SOCK,那么我們可以在 Windows 消息循環中增加如下的分支語句:

case UM_SOCK:
switch(lParam)
{
case FD_READ:
len = recv(wParam,lpBuffer,length,0);
break;
case FD_WRITE:
while(send(wParam,lpBuffer,len,0)!=SOCKET_ERROR)
break;
}
break;

  4、出錯處理

  Windows 提供了一個函數來獲取最近的錯誤碼 WSAGetLastError(),推薦的編寫方式如下:

len = send (s,lpBuffer,len,0);
of((len==SOCKET_ERROR)&&(WSAGetLastError()==WSAWOULDBLOCK)){...}
posted on 2007-01-30 22:07 獨孤九劍 閱讀(834) 評論(0)  編輯 收藏 引用 所屬分類: network protocol
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美视频中文一区二区三区在线观看| 免费欧美网站| 国内自拍亚洲| 国产午夜精品在线| 国产亚洲精品激情久久| 国产欧美不卡| 国产一区美女| 亚洲国产三级网| 夜夜嗨av一区二区三区四季av| 99精品视频一区二区三区| 亚洲免费观看| 亚洲男同1069视频| 羞羞答答国产精品www一本| 久久久91精品| 亚洲丁香婷深爱综合| 国产精品久久久久久久第一福利| av成人免费在线观看| 亚洲欧美偷拍卡通变态| 欧美亚洲日本国产| 老司机成人网| 国产精品久久久久久av下载红粉 | 久久人人爽人人爽爽久久| 久久久精品久久久久| 久久人人九九| 国产精品综合av一区二区国产馆| 亚洲第一福利在线观看| 亚洲一区二区三区在线| 久久亚洲国产精品一区二区 | 国产精品福利影院| 激情成人在线视频| 亚洲图色在线| 亚洲国产成人91精品| 亚洲特级毛片| 欧美国产在线电影| 有坂深雪在线一区| 午夜精品福利在线| 最新国产成人av网站网址麻豆| 午夜激情一区| 国产精品va在线播放| 亚洲国产毛片完整版 | 久久久精品国产免大香伊 | 欧美噜噜久久久xxx| 国内精品**久久毛片app| 中文一区在线| 亚洲国产高清高潮精品美女| 亚洲欧美国产一区二区三区| 欧美精品久久久久久久| 激情成人综合网| 亚洲欧美日韩精品久久奇米色影视| 欧美成人激情在线| 欧美一区二区三区日韩视频| 欧美视频在线一区| 99精品欧美一区二区蜜桃免费| 久久一区中文字幕| 欧美亚洲一级片| 国产精品久久久99| 在线一区二区三区四区| 91久久国产自产拍夜夜嗨| 久久久人人人| 亚洲精品视频在线播放| 欧美午夜精品久久久久免费视| 亚洲影院一区| 久久久免费精品| 久久黄色小说| 国产一区导航| 久久亚洲高清| 免费人成精品欧美精品| 亚洲精品日韩久久| 亚洲人成精品久久久久| 欧美金8天国| 亚洲一本视频| 亚洲欧美日韩国产综合精品二区| 国产女同一区二区| 久热精品在线视频| 久久综合九色99| 亚洲精品一二| 在线视频精品| 国产视频欧美| 欧美成人国产va精品日本一级| 玖玖国产精品视频| 日韩视频免费观看| 亚洲一级在线观看| 国产在线欧美| 亚洲福利在线视频| 欧美三级乱人伦电影| 欧美亚洲网站| 久久亚洲精品伦理| 一区二区三区精品视频| 亚洲一区二区在| 一区二区三区在线不卡| 91久久精品国产91久久| 国产精品久久久久一区| 久久人91精品久久久久久不卡| 欧美h视频在线| 亚洲自拍偷拍麻豆| 老司机午夜免费精品视频| 一本久道久久综合狠狠爱| 亚洲在线视频观看| 91久久嫩草影院一区二区| 在线视频一区二区| 亚洲国产精品精华液2区45| 99精品热视频只有精品10| 国产一区二区日韩精品欧美精品| 亚洲国产成人在线视频| 国产欧美日韩91| 最新国产拍偷乱拍精品| 国产视频亚洲精品| 亚洲国产小视频| 国产三级精品在线不卡| 亚洲欧洲精品一区二区三区| 国产一区二区三区最好精华液| 亚洲国产欧美精品| 国产亚洲精品一区二区| 亚洲最新中文字幕| 最新国产精品拍自在线播放| 亚洲欧美日韩中文播放| aa级大片欧美三级| 久久全国免费视频| 欧美在线视频一区二区| 欧美日韩美女在线观看| 国产精品福利影院| 一区二区三区.www| 亚洲欧美文学| 一区二区日韩欧美| 欧美成人精品一区二区三区| 欧美中文在线观看国产| 欧美三级资源在线| 亚洲精品国产系列| 亚洲日本成人女熟在线观看| 久久久精品一品道一区| 久久精品亚洲精品国产欧美kt∨| 欧美日韩高清一区| 亚洲人成在线观看网站高清| 亚洲国产精品一区二区www| 久久久久久久激情视频| 欧美fxxxxxx另类| 亚洲欧洲一二三| 欧美激情精品久久久久久蜜臀| 欧美高清自拍一区| 亚洲欧洲在线视频| 欧美激情网站在线观看| 亚洲人成啪啪网站| 一片黄亚洲嫩模| 欧美精品免费视频| 亚洲精品在线观| 亚洲网站在线观看| 国产精品久久夜| 亚洲欧美日韩精品在线| 久久精品夜色噜噜亚洲aⅴ| 国产一区二区日韩| 蜜桃伊人久久| 亚洲精品中文字幕女同| 一本综合精品| 国产精品久久久久一区二区三区共 | 亚洲国产第一| 中日韩在线视频| 国产精品久久久久久久电影| 亚洲免费网址| 美女黄毛**国产精品啪啪| 亚洲国产成人av好男人在线观看| 蜜臀91精品一区二区三区| 最新亚洲激情| 午夜一区不卡| 亚洲国产欧美一区二区三区丁香婷| 欧美黑人在线观看| 亚洲性夜色噜噜噜7777| 久久婷婷综合激情| 亚洲免费精彩视频| 国产亚洲福利社区一区| 欧美成人国产一区二区| 一本色道久久综合狠狠躁的推荐| 欧美一区二区三区四区在线| 亚洲成色精品| 国产精品久久久久婷婷| 久久综合九色综合欧美就去吻| 亚洲人体1000| 久久久www免费人成黑人精品 | 欧美在线1区| 亚洲人成高清| 国产一区二区三区在线观看视频 | 欧美成人精品h版在线观看| 99精品热6080yy久久| 国产亚洲一区二区三区在线播放| 你懂的成人av| 欧美在线|欧美| 亚洲欧美日韩在线播放| 欧美三级欧美一级| 久久嫩草精品久久久精品| 一区二区三区精品在线| 免费日韩成人| 欧美亚洲日本国产| 99精品黄色片免费大全| 亚洲成色精品| 韩国三级电影久久久久久| 欧美巨乳在线| 免费一区二区三区| 久久久成人网| 欧美在线高清| 亚洲女女做受ⅹxx高潮| 日韩午夜激情电影|