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

思勤無邪

上學時,因我年齡最小,個頭也最小,上課時,就像大猩猩堆里的猴一般。如今,這猴偶爾也把最近的一些情況寫在這里。

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  132 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

公告

     吾日常三省吾身,曰思、曰勤、曰無邪。

積分與排名

  • 積分 - 186375
  • 排名 - 140

最新隨筆

最新評論

閱讀排行榜

評論排行榜


一、WSAStartup函數
???int?WSAStartup(
?????WORD?wVersionRequested,??
?????LPWSADATA?lpWSAData??
???);
???使用Socket的程序在使用Socket之前必須調用WSAStartup函數。該函數的第一個參數指明程序請求使用的Socket版本,其中高位字節指明副版本、低位字節指明主版本;操作系統利用第二個參數返回請求的Socket的版本信息。當一個應用程序調用WSAStartup函數時,操作系統根據請求的Socket版本來搜索相應的Socket庫,然后綁定找到的Socket庫到該應用程序中。以后應用程序就可以調用所請求的Socket庫中的其它Socket函數了。該函數執行成功后返回0。
例:假如一個程序要使用2.1版本的Socket,那么程序代碼如下
???????????wVersionRequested?=?MAKEWORD(?2,?1?);
???????????err?=?WSAStartup(?wVersionRequested,?&wsaData?);

二、WSACleanup函數
???int?WSACleanup?(void);
???應用程序在完成對請求的Socket庫的使用后,要調用WSACleanup函數來解除與Socket庫的綁定并且釋放Socket庫所占用的系統資源。

三、socket函數
??SOCKET?socket(
?????int?af,???????
?????int?type,?????
?????int?protocol??
???);
???應用程序調用socket函數來創建一個能夠進行網絡通信的套接字。第一個參數指定應用程序使用的通信協議的協議族,對于TCP/IP協議族,該參數置PF_INET;第二個參數指定要創建的套接字類型,流套接字類型為SOCK_STREAM、數據報套接字類型為SOCK_DGRAM;第三個參數指定應用程序所使用的通信協議。該函數如果調用成功就返回新創建的套接字的描述符,如果失敗就返回INVALID_SOCKET。套接字描述符是一個整數類型的值。每個進程的進程空間里都有一個套接字描述符表,該表中存放著套接字描述符和套接字數據結構的對應關系。該表中有一個字段存放新創建的套接字的描述符,另一個字段存放套接字數據結構的地址,因此根據套接字描述符就可以找到其對應的套接字數據結構。每個進程在自己的進程空間里都有一個套接字描述符表但是套接字數據結構都是在操作系統的內核緩沖里。下面是一個創建流套接字的例子:
???????struct?protoent?*ppe;
???????ppe=getprotobyname("tcp");
???????SOCKET?ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);

四、closesocket函數
??int?closesocket(
?????SOCKET?s??
???);
???closesocket函數用來關閉一個描述符為s套接字。由于每個進程中都有一個套接字描述符表,表中的每個套接字描述符都對應了一個位于操作系統緩沖區中的套接字數據結構,因此有可能有幾個套接字描述符指向同一個套接字數據結構。套接字數據結構中專門有一個字段存放該結構的被引用次數,即有多少個套接字描述符指向該結構。當調用closesocket函數時,操作系統先檢查套接字數據結構中的該字段的值,如果為1,就表明只有一個套接字描述符指向它,因此操作系統就先把s在套接字描述符表中對應的那條表項清除,并且釋放s對應的套接字數據結構;如果該字段大于1,那么操作系統僅僅清除s在套接字描述符表中的對應表項,并且把s對應的套接字數據結構的引用次數減1。
closesocket函數如果執行成功就返回0,否則返回SOCKET_ERROR。

五、send函數
??int?send(
?????SOCKET?s,??????????????
?????const?char?FAR?*buf,??
?????int?len,???????????????
?????int?flags??????????????
???);
???不論是客戶還是服務器應用程序都用send函數來向TCP連接的另一端發送數據。客戶程序一般用send函數向服務器發送請求,而服務器則通常用send函數來向客戶程序發送應答。該函數的第一個參數指定發送端套接字描述符;第二個參數指明一個存放應用程序要發送數據的緩沖區;第三個參數指明實際要發送的數據的字節數;第四個參數一般置0。這里只描述同步Socket的send函數的執行流程。當調用該函數時,send先比較待發送數據的長度len和套接字s的發送緩沖區的長度,如果len大于s的發送緩沖區的長度,該函數返回SOCKET_ERROR;如果len小于或者等于s的發送緩沖區的長度,那么send先檢查協議是否正在發送s的發送緩沖中的數據,如果是就等待協議把數據發送完,如果協議還沒有開始發送s的發送緩沖中的數據或者s的發送緩沖中沒有數據,那么send就比較s的發送緩沖區的剩余空間和len,如果len大于剩余空間大小send就一直等待協議把s的發送緩沖中的數據發送完,如果len小于剩余空間大小send就僅僅把buf中的數據copy到剩余空間里(注意并不是send把s的發送緩沖中的數據傳到連接的另一端的,而是協議傳的,send僅僅是把buf中的數據copy到s的發送緩沖區的剩余空間里)。如果send函數copy數據成功,就返回實際copy的字節數,如果send在copy數據時出現錯誤,那么send就返回SOCKET_ERROR;如果send在等待協議傳送數據時網絡斷開的話,那么send函數也返回SOCKET_ERROR。要注意send函數把buf中的數據成功copy到s的發送緩沖的剩余空間里后它就返回了,但是此時這些數據并不一定馬上被傳到連接的另一端。如果協議在后續的傳送過程中出現網絡錯誤的話,那么下一個Socket函數就會返回SOCKET_ERROR。(每一個除send外的Socket函數在執行的最開始總要先等待套接字的發送緩沖中的數據被協議傳送完畢才能繼續,如果在等待時出現網絡錯誤,那么該Socket函數就返回SOCKET_ERROR)
注意:在Unix系統下,如果send在等待協議傳送數據時網絡斷開的話,調用send的進程會接收到一個SIGPIPE信號,進程對該信號的默認處理是進程終止。

六、recv函數
???int?recv(
?????SOCKET?s,???????
?????char?FAR?*buf,??
?????int?len,????????
?????int?flags???????
???);
???不論是客戶還是服務器應用程序都用recv函數從TCP連接的另一端接收數據。該函數的第一個參數指定接收端套接字描述符;第二個參數指明一個緩沖區,該緩沖區用來存放recv函數接收到的數據;第三個參數指明buf的長度;第四個參數一般置0。這里只描述同步Socket的recv函數的執行流程。當應用程序調用recv函數時,recv先等待s的發送緩沖中的數據被協議傳送完畢,如果協議在傳送s的發送緩沖中的數據時出現網絡錯誤,那么recv函數返回SOCKET_ERROR,如果s的發送緩沖中沒有數據或者數據被協議成功發送完畢后,recv先檢查套接字s的接收緩沖區,如果s接收緩沖區中沒有數據或者協議正在接收數據,那么recv就一直等待,只到協議把數據接收完畢。當協議把數據接收完畢,recv函數就把s的接收緩沖中的數據copy到buf中(注意協議接收到的數據可能大于buf的長度,所以在這種情況下要調用幾次recv函數才能把s的接收緩沖中的數據copy完。recv函數僅僅是copy數據,真正的接收數據是協議來完成的),recv函數返回其實際copy的字節數。如果recv在copy時出錯,那么它返回SOCKET_ERROR;如果recv函數在等待協議接收數據時網絡中斷了,那么它返回0。
注意:在Unix系統下,如果recv函數在等待協議接收數據時網絡斷開了,那么調用recv的進程會接收到一個SIGPIPE信號,進程對該信號的默認處理是進程終止。

七、bind函數
??int?bind(
?????SOCKET?s,??????????????????????????
?????const?struct?sockaddr?FAR?*name,???
?????int?namelen????????????????????????
???);
???當創建了一個Socket以后,套接字數據結構中有一個默認的IP地址和默認的端口號。一個服務程序必須調用bind函數來給其綁定一個IP地址和一個特定的端口號。客戶程序一般不必調用bind函數來為其Socket綁定IP地址和斷口號。該函數的第一個參數指定待綁定的Socket描述符;第二個參數指定一個sockaddr結構,該結構是這樣定義的:?
struct?sockaddr?{?
???????????u_short?sa_family;?
???????????char?sa_data[14];?
???????};
??sa_family指定地址族,對于TCP/IP協議族的套接字,給其置AF_INET。當對TCP/IP協議族的套接字進行綁定時,我們通常使用另一個地址結構:
???????struct?sockaddr_in?{
???????????short???sin_family;
???????????u_short?sin_port;
???????????struct??in_addr?sin_addr;
???????????char????sin_zero[8];
???????};
???其中sin_family置AF_INET;sin_port指明端口號;sin_addr結構體中只有一個唯一的字段s_addr,表示IP地址,該字段是一個整數,一般用函數inet_addr()把字符串形式的IP地址轉換成unsigned?long型的整數值后再置給s_addr。有的服務器是多宿主機,至少有兩個網卡,那么運行在這樣的服務器上的服務程序在為其Socket綁定IP地址時可以把htonl(INADDR_ANY)置給s_addr,這樣做的好處是不論哪個網段上的客戶程序都能與該服務程序通信;如果只給運行在多宿主機上的服務程序的Socket綁定一個固定的IP地址,那么就只有與該IP地址處于同一個網段上的客戶程序才能與該服務程序通信。我們用0來填充sin_zero數組,目的是讓sockaddr_in結構的大小與sockaddr結構的大小一致。下面是一個bind函數調用的例子:
???struct?sockaddr_in?saddr;
???saddr.sin_family?=?AF_INET;
???saddr.sin_port?=?htons(8888);
???saddr.sin_addr.s_addr?=?htonl(INADDR_ANY);
???bind(ListenSocket,(struct?sockaddr?*)&saddr,sizeof(saddr));

八、listen函數
???int?listen(?SOCKET?s,?int?backlog?);
???服務程序可以調用listen函數使其流套接字s處于監聽狀態。處于監聽狀態的流套接字s將維護一個客戶連接請求隊列,該隊列最多容納backlog個客戶連接請求。假如該函數執行成功,則返回0;如果執行失敗,則返回SOCKET_ERROR。

九、accept函數
???SOCKET?accept(
?????SOCKET?s,?
?????struct?sockaddr?FAR?*addr,??
?????int?FAR?*addrlen??
???);
???服務程序調用accept函數從處于監聽狀態的流套接字s的客戶連接請求隊列中取出排在最前的一個客戶請求,并且創建一個新的套接字來與客戶套接字創建連接通道,如果連接成功,就返回新創建的套接字的描述符,以后與客戶套接字交換數據的是新創建的套接字;如果失敗就返回INVALID_SOCKET。該函數的第一個參數指定處于監聽狀態的流套接字;操作系統利用第二個參數來返回新創建的套接字的地址結構;操作系統利用第三個參數來返回新創建的套接字的地址結構的長度。下面是一個調用accept的例子:
???????struct?sockaddr_in?ServerSocketAddr;
???????int?addrlen;
???????addrlen=sizeof(ServerSocketAddr);
???????ServerSocket=accept(ListenSocket,(struct?sockaddr?*)&ServerSocketAddr,&addrlen);

十、connect函數
???int?connect(
?????SOCKET?s,??????????????????????????
?????const?struct?sockaddr?FAR?*name,??
?????int?namelen????????????????????????
???);
???客戶程序調用connect函數來使客戶Socket?s與監聽于name所指定的計算機的特定端口上的服務Socket進行連接。如果連接成功,connect返回0;如果失敗則返回SOCKET_ERROR。下面是一個例子:
???????struct?sockaddr_in?daddr;
???????memset((void?*)&daddr,0,sizeof(daddr));
???????daddr.sin_family=AF_INET;
???????daddr.sin_port=htons(8888);
???????daddr.sin_addr.s_addr=inet_addr("133.197.22.4");
???????connect(ClientSocket,(struct?sockaddr?*)&daddr,sizeof(daddr));?

posted on 2006-10-11 08:32 思勤無邪 閱讀(1415) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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一区| 久久艳片www.17c.com| 欧美激情视频一区二区三区免费| 欧美aⅴ99久久黑人专区| 欧美日韩精品三区| 国产日韩欧美91| 亚洲人午夜精品免费| 亚洲校园激情| 美女主播一区| 一区二区三区黄色| 久久一区二区三区av| 国产精品v日韩精品v欧美精品网站| 国产在线精品一区二区中文| 亚洲精品一区中文| 国产一区二区三区在线播放免费观看 | 久久国产精品久久久久久| 久久久久综合| 在线视频精品一| 免费欧美电影| 国产综合在线看| 亚洲欧美日韩综合国产aⅴ| 欧美激情偷拍| 久久精品一区二区国产| 国产精品国内视频| 亚洲美女中文字幕| 欧美jizzhd精品欧美巨大免费| 亚洲视频欧美视频| 欧美日韩网站| 亚洲精品影院| 欧美激情一区二区三区成人| 西西裸体人体做爰大胆久久久| 欧美日韩精品免费观看| 亚洲日本电影在线| 免费在线观看一区二区| 亚洲欧美视频一区| 国产精品久久久久久户外露出| 亚洲高清一区二| 久久精品国产69国产精品亚洲| 在线综合+亚洲+欧美中文字幕| 免费一级欧美片在线播放| 国产乱码精品一区二区三区忘忧草| 91久久精品一区二区三区| 老巨人导航500精品| 亚洲视频欧美在线| 国产精品大片| 午夜精品久久久久久久白皮肤| 欧美风情在线| 欧美jizzhd精品欧美巨大免费| 国产综合在线视频| 久久夜色精品国产欧美乱极品 | 欧美黄色日本| 美女免费视频一区| 亚洲精品123区| 亚洲国产成人精品久久久国产成人一区 | 亚洲国产aⅴ天堂久久| 榴莲视频成人在线观看| 久久天天躁夜夜躁狠狠躁2022| 激情综合在线| 欧美二区视频| 欧美日韩亚洲视频一区| 亚洲欧美日韩精品| 亚洲女爱视频在线| 国产日韩欧美在线| 毛片基地黄久久久久久天堂| 久久综合久久88| 午夜一区二区三区在线观看| 国产欧美日韩一区二区三区在线观看| 欧美一区二区三区在线播放| 久久国产精品免费一区| 亚洲人成啪啪网站| 日韩午夜免费| 国产日韩精品在线| 蜜臀av国产精品久久久久| 欧美激情女人20p| 午夜精品免费| 久热精品视频在线免费观看| 亚洲视频欧美在线| 欧美有码在线视频| 亚洲乱码日产精品bd| 亚洲视频综合| 亚洲第一毛片| 亚洲欧美大片| 日韩一二三在线视频播| 欧美一区二区精品| av成人免费观看| 欧美在线免费播放| 亚洲日韩视频| 亚洲性视频网址| 亚洲国产成人在线播放| 亚洲一区二区三区精品动漫| 影音先锋亚洲精品| 亚洲一区二区三区视频| 亚洲人午夜精品免费| 久久国产精品色婷婷| 亚洲一区三区电影在线观看| 老司机精品视频网站| 欧美在线视频a| 欧美日韩色一区| 美玉足脚交一区二区三区图片| 国产精品久久久久久久久久三级| 欧美激情影院| 国产在线不卡精品| 亚洲午夜一二三区视频| 99国产欧美久久久精品| 久久人人97超碰精品888| 欧美亚洲一级| 欧美午夜免费电影| 亚洲欧洲一区二区三区久久| 亚洲第一黄网| 久久久久久穴| 久热精品在线| 影音国产精品| 免费黄网站欧美| 欧美成人午夜激情在线| 国产午夜精品美女毛片视频| 亚洲一区二区成人| 亚洲欧美中文另类| 国产精品久久久久久久浪潮网站| 日韩一级免费观看| 一本色道久久88亚洲综合88| 欧美激情精品久久久久久久变态| 欧美成人嫩草网站| 亚洲精品麻豆| 欧美激情一二三区| 亚洲美女网站| 亚洲欧美中日韩| 国产一区二区三区四区hd| 欧美怡红院视频| 毛片一区二区| 日韩天堂av| 欧美婷婷六月丁香综合色| av成人天堂| 国产精品手机在线| 亚洲一区高清| 欧美自拍偷拍| 国内精品国产成人| 久久久久久色| 亚洲精品欧美在线| 亚洲女性喷水在线观看一区| 国产精品青草综合久久久久99 | 在线精品国精品国产尤物884a| 久久人体大胆视频| 亚洲二区在线观看| 一本色道久久综合亚洲精品婷婷 | 欧美成人精品不卡视频在线观看| 亚洲成人在线视频播放 | 狠狠爱综合网| 美女视频一区免费观看| 最新日韩在线视频| 亚洲一区欧美一区| 黑丝一区二区三区| 欧美精品二区| 亚洲欧美中日韩| 欧美mv日韩mv国产网站app| 99国产精品久久久久久久久久| 欧美日本精品| 欧美诱惑福利视频| 亚洲国产婷婷| 午夜天堂精品久久久久| 国产主播一区| 欧美日韩午夜视频在线观看| 性娇小13――14欧美| 欧美成人免费在线视频| 亚洲欧美日韩一区二区三区在线 | 欧美一级久久久久久久大片| 国产一区二区精品久久99| 欧美成人中文字幕| 亚洲夜间福利| 亚洲高清123| 久久精品国产久精国产爱| 99国产精品久久久久久久久久| 黄色亚洲免费| 国产精品日韩电影| 欧美va天堂| 久久精品视频在线看| 亚洲视频久久| 日韩视频一区二区三区在线播放免费观看| 久久精视频免费在线久久完整在线看| 99国产精品国产精品毛片| 亚洲国产日韩欧美在线图片| 国产欧美日韩亚洲一区二区三区| 欧美日韩免费一区| 欧美福利影院| 老牛国产精品一区的观看方式| 亚洲综合色自拍一区| 一区二区三区精品视频| 亚洲精品久久久一区二区三区| 亚洲高清免费在线| 国产日韩在线一区| 国产精品久久二区|