亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Windows Socket1.1 程序設計

2019-11-17 05:06:08
字體:
來源:轉載
供稿:網友
[文章導讀]Windows Sockets 是從 Berkeley Sockets 擴展而來的,其在繼續 Berkeley Sockets 的基礎上,又進行了新的擴充 一、簡介
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_READFD_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操作系統安全集  Windows操作系統安裝  Windows頻道專題,或 三、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 的值是相同的?! ?、異步請求服務

   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)){...}
更多文章 更多內容請看Windows操作系統安全集 
 Windows操作系統安裝  Windows頻道專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本一本久久a久久精品综合小说| 精品久久久久久久久久久久久久| 欧美特级www| 精品日本美女福利在线观看| 日韩精品视频在线播放| 91精品国产91久久久久福利| 欧美激情第一页xxx| 精品香蕉在线观看视频一| 日本三级韩国三级久久| 国产精品亚洲视频在线观看| 精品无人区乱码1区2区3区在线| 亚洲国产成人久久综合一区| 欧美日韩国产丝袜另类| 国产日产欧美精品| 久久久91精品国产一区不卡| 成人欧美一区二区三区黑人| www.亚洲成人| 精品国产老师黑色丝袜高跟鞋| 日本精品久久久久久久| 粉嫩av一区二区三区免费野| 久久久久久网址| 青青草99啪国产免费| 国产在线不卡精品| 大量国产精品视频| 色视频www在线播放国产成人| 欧美人交a欧美精品| 日韩免费中文字幕| 午夜精品国产精品大乳美女| 日韩美女视频中文字幕| 久久精品2019中文字幕| 国产亚洲精品久久久优势| 国产精品日韩专区| 亚洲欧美精品中文字幕在线| 九九久久久久99精品| 日本欧美一二三区| 国产大片精品免费永久看nba| 国产精品久久久久久久久| 日本国产欧美一区二区三区| 国产精品爽爽爽| 26uuu另类亚洲欧美日本一| 欧美精品aaa| 亚洲成人激情小说| 久久久www成人免费精品张筱雨| 日本午夜精品理论片a级appf发布| 视频直播国产精品| 超薄丝袜一区二区| 亚洲丁香久久久| 亚洲欧美精品伊人久久| 中文字幕日韩精品在线观看| 日韩视频在线免费观看| 丝袜美腿亚洲一区二区| 欧美精品在线看| 国产精品久久久久久久久久久久| 国产精品电影久久久久电影网| 国产成人在线一区| 91国产美女在线观看| 国产成人亚洲综合青青| 亚洲女人被黑人巨大进入al| 国产精品嫩草影院一区二区| 91久久综合亚洲鲁鲁五月天| 精品无人国产偷自产在线| 欧美在线激情网| 亚洲视频在线视频| 欧美激情视频三区| 欧日韩不卡在线视频| 8050国产精品久久久久久| 久久男人的天堂| 色偷偷88888欧美精品久久久| 亚洲乱码国产乱码精品精天堂| 久久久99免费视频| 91国偷自产一区二区三区的观看方式| 成人福利免费观看| 久久艳片www.17c.com| 91国内精品久久| 欧美精品中文字幕一区| 亚洲美女av黄| 992tv在线成人免费观看| 亚洲综合小说区| 国产精品视频色| 91免费视频网站| 欧洲成人性视频| 欧美极度另类性三渗透| 中文字幕日韩欧美在线| 亚洲激情小视频| 亚洲影院色在线观看免费| 亚洲美女在线视频| 亚洲精品之草原avav久久| 亚洲色图第三页| 中文字幕亚洲字幕| 欧美午夜电影在线| 亚洲视频免费一区| 午夜剧场成人观在线视频免费观看| 国产伦精品一区二区三区精品视频| 亚洲热线99精品视频| 日韩成人激情视频| 国产欧美日韩91| 奇米成人av国产一区二区三区| 91精品国产91久久久久久不卡| 91国产精品视频在线| 久久久久久久久久久国产| 中文字幕欧美国内| 中文字幕亚洲二区| 日韩精品中文字幕在线| 91av视频在线播放| 国产91精品最新在线播放| 国产精品福利久久久| 国产视频久久久| 秋霞成人午夜鲁丝一区二区三区| 国色天香2019中文字幕在线观看| 亚洲黄色www网站| 国产精品av在线播放| 成人高清视频观看www| 日韩av123| 九九久久综合网站| 久久精品国产免费观看| 亚洲性av在线| 久久久久久久久久久久av| 一区二区三区高清国产| 中文字幕国产精品| 国产精品丝袜久久久久久不卡| 亚洲少妇激情视频| 91chinesevideo永久地址| 91丝袜美腿美女视频网站| 亚洲美女又黄又爽在线观看| 亚洲性69xxxbbb| 亚洲精品一区二三区不卡| 欧美剧在线观看| 亚洲偷熟乱区亚洲香蕉av| 91亚洲一区精品| 国内久久久精品| 国产一区在线播放| 国产精品jvid在线观看蜜臀| 欧美xxxx14xxxxx性爽| 色偷偷9999www| 国产免费一区二区三区在线能观看| 中文字幕日本精品| 国产精品尤物福利片在线观看| 久久精品国产久精国产一老狼| 成人免费淫片aa视频免费| 亚洲男女性事视频| 成人h猎奇视频网站| 欧美日韩成人网| 自拍偷拍亚洲精品| 欧美激情乱人伦| 中文日韩电影网站| 777午夜精品福利在线观看| 日韩视频免费观看| 亚洲精品综合久久中文字幕| 欧美色videos| 欧美激情一二三| 亚洲激情电影中文字幕| 高清欧美性猛交xxxx黑人猛交| 高清日韩电视剧大全免费播放在线观看| 亚洲一区中文字幕| 亚洲乱码一区av黑人高潮| 国产精品精品国产| 亚洲一区二区三区sesese| 午夜精品久久久久久久久久久久| 亚洲福利在线播放| 国产精品麻豆va在线播放| 国产日韩在线视频| 国产精品久久久久久网站| 亚洲色在线视频| 日韩一区二区在线视频|