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

隨筆 - 96  文章 - 255  trackbacks - 0
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

E-mail:zbln426@163.com QQ:85132383 長(zhǎng)期尋找對(duì)戰(zhàn)略游戲感興趣的合作伙伴。

常用鏈接

留言簿(21)

隨筆分類(lèi)

隨筆檔案

SDL相關(guān)網(wǎng)站

我的個(gè)人網(wǎng)頁(yè)

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 494459
  • 排名 - 39

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

作者:龍飛

        這里的“通訊”加上了引號(hào),是因?yàn)閷?shí)際上所有的socket都有通訊的功能,只是在我們的例子中,之前那個(gè)socket只負(fù)責(zé)listen,而這個(gè)socket負(fù)責(zé)接受信息并echo回去。
 我們現(xiàn)看看這個(gè)函數(shù):
bool TcpServer::isAccept()
{
    unsigned 
int clntAddrLen = sizeof(clntAddr);

    
if ( (communicationSock = accept(listenSock, (sockaddr*)&clntAddr, &clntAddrLen)) < 0 ) {
        
return false;
    } 
else {
        std::cout 
<< "Client(IP: " << inet_ntoa(clntAddr.sin_addr) << ") connected.\n";
        
return true;
    }
}

用accept()創(chuàng)建新的socket

        在我們的例子中,communicationSock實(shí)際上是用函數(shù)accept()創(chuàng)建的。
int accept(int socket, struct sockaddr* clientAddress, unsigned int* addressLength);
在Linux中的實(shí)現(xiàn)為:
/* Await a connection on socket FD.
   When a connection arrives, open a new socket to communicate with it,
   set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
   peer and *ADDR_LEN to the address's actual length, and return the
   new socket's descriptor, or -1 for errors.

   This function is a cancellation point and therefore not marked with
   __THROW.  
*/
extern int accept (int __fd, __SOCKADDR_ARG __addr,
           socklen_t 
*__restrict __addr_len);
這個(gè)函數(shù)實(shí)際上起著構(gòu)造socket作用的僅僅只有第一個(gè)參數(shù)(另外還有一個(gè)不在這個(gè)函數(shù)內(nèi)表現(xiàn)出來(lái)的因素,后面會(huì)討論到),后面兩個(gè)指針都有副作用,在socket創(chuàng)建后,會(huì)將客戶(hù)端sockaddr的數(shù)據(jù)以及結(jié)構(gòu)體的大小傳回。
        當(dāng)程序調(diào)用accept()的時(shí)候,程序有可能就停下來(lái)等accept()的結(jié)果。這就是我們前一小節(jié)說(shuō)到的block(阻塞)。這如同我們調(diào)用std::cin的時(shí)候系統(tǒng)會(huì)等待輸入直到回車(chē)一樣。accept()是一個(gè)有可能引起block的函數(shù)。請(qǐng)注意我說(shuō)的是“有可能”,這是因?yàn)閍ccept()的block與否實(shí)際上決定與第一個(gè)參數(shù)socket的屬性。這個(gè)文件描述符如果是block的,accept()就block,否則就不block。默認(rèn)情況下,socket的屬性是“可讀可寫(xiě)”,并且,是阻塞的。所以,我們不修改socket屬性的時(shí)候,accept()是阻塞的。

accept()的另一面connect()

        accept()只是在server端被動(dòng)的等待,它所響應(yīng)的,是client端connect()函數(shù):
int connect(int socket, struct sockaddr* foreignAddress, unsigned int addressLength);
雖然我們這里不打算詳細(xì)說(shuō)明這個(gè)client端的函數(shù),但是我們可以看出來(lái),這個(gè)函數(shù)與之前我們介紹的bind()有幾分相似,特別在Linux的實(shí)現(xiàn)中:
/* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
   For connectionless socket types, just set the default address to send to
   and the only address from which to accept transmissions.
   Return 0 on success, -1 for errors.

   This function is a cancellation point and therefore not marked with
   __THROW.  
*/
extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
connect() 也使用了const的sockaddr,只不過(guò)是遠(yuǎn)程電腦上的而非bind()的本機(jī)。
        accept()在server端表面上是通過(guò)listen socket創(chuàng)建了新的socket,實(shí)際上,這種行為是在接受對(duì)方客戶(hù)機(jī)程序中connect()函數(shù)的請(qǐng)求后發(fā)生的。綜合起看,被創(chuàng)建的新socket實(shí)際上包含了listen socket的信息以及客戶(hù)端connect()請(qǐng)求中所包含的信息——客戶(hù)端的sockaddr地址。

新socket與sockaddr的關(guān)系

        accept()創(chuàng)建的新socket(我們例子中的communicationSock,這里我們簡(jiǎn)單用newSock來(lái)帶指)首先包含了listen socket的信息,所以,newSock具有本機(jī)sockaddr的信息;其次,因?yàn)樗憫?yīng)于client端connect()函數(shù)的請(qǐng)求,所以,它還包含了clinet端sockaddr的信息。
        我們說(shuō)過(guò),stream流形式的TCP協(xié)議實(shí)際上是建立起一個(gè)“可來(lái)可去”的通道。用于listen的通道,遠(yuǎn)程機(jī)的目標(biāo)地址是不確定的;但是newSock卻是有指定的本機(jī)地址和遠(yuǎn)程機(jī)地址,所以,這個(gè)socket,才是我們真正用于TCP“通訊”的socket。

inet_ntoa()
#include <arpa/inet.h>

/* Convert Internet number in IN to ASCII representation.  The return value
   is a pointer to an internal array containing the string.  
*/
extern char *inet_ntoa (struct in_addr __in) __THROW;
        對(duì)于這個(gè)函數(shù),我們可以作為一種,將IP地址,由in_addr結(jié)構(gòu)轉(zhuǎn)換為可讀的ASCII形式的固定用法。

posted on 2008-07-15 13:04 lf426 閱讀(4208) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): SDL入門(mén)教程Linux與C++socket 編程入門(mén)教程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费视频观看| 亚洲国产精品va在线看黑人动漫| 亚洲网址在线| 日韩午夜中文字幕| 亚洲在线视频观看| 欧美亚洲免费高清在线观看| 欧美一级网站| 午夜精品网站| 男女av一区三区二区色多| 欧美激情免费在线| 一区二区三区色| 久久精品国产在热久久| 欧美在线关看| 久久这里有精品视频| 欧美成人中文字幕在线| 亚洲精品综合久久中文字幕| 在线午夜精品自拍| 久久久精品性| 欧美日韩中文字幕在线视频| 国产视频观看一区| 亚洲精品欧美在线| 午夜视频在线观看一区| 媚黑女一区二区| 夜夜嗨av一区二区三区免费区| 亚洲欧美激情视频| 你懂的视频欧美| 国产日产精品一区二区三区四区的观看方式| 国产一区欧美| 99综合精品| 欧美成va人片在线观看| 亚洲午夜精品| 免费一区二区三区| 国产在线视频欧美| 亚洲小视频在线观看| 麻豆精品一区二区综合av| 亚洲美女福利视频网站| 久久久久久久999| 国产精品久久网| 一二三区精品| 亚洲二区在线观看| 亚洲一区自拍| 欧美精品久久久久久久久老牛影院| 国产噜噜噜噜噜久久久久久久久| 亚洲欧洲日本国产| 蜜桃伊人久久| 性做久久久久久久免费看| 欧美三级小说| 一区二区三区久久久| 欧美激情亚洲视频| 巨乳诱惑日韩免费av| 狠狠干成人综合网| 久久蜜桃资源一区二区老牛| 亚洲欧美日韩爽爽影院| 国产精品一区二区视频| 性欧美8khd高清极品| 亚洲一区二区三区免费视频 | 中日韩美女免费视频网站在线观看| 久久精品女人的天堂av| 亚洲免费成人av| 欧美喷水视频| 99在线视频精品| 亚洲高清不卡av| 浪潮色综合久久天堂| 好看的av在线不卡观看| 性欧美在线看片a免费观看| 一区二区高清| 国产精品久久久久久久久免费樱桃| 99热精品在线| 久久天天躁狠狠躁夜夜av| 亚洲女同同性videoxma| 国产精品99久久不卡二区| 欧美日韩国产首页| 亚洲午夜精品福利| 亚洲欧美清纯在线制服| 国产日韩欧美综合精品| 久久精品国产久精国产爱| 欧美一区二区三区喷汁尤物| 国产一区高清视频| 欧美成人嫩草网站| 欧美日韩xxxxx| 亚洲在线1234| 久久精品国产欧美亚洲人人爽| 一色屋精品视频在线看| 欧美高清在线一区| 欧美日韩精品一区二区三区四区 | 久久综合九色综合欧美就去吻| 性欧美video另类hd性玩具| 在线精品国产欧美| 日韩午夜精品| 国产在线精品自拍| 亚洲国产精品www| 国产精品国产三级国产aⅴ无密码| 久久激情五月婷婷| 蜜月aⅴ免费一区二区三区| 亚洲一区二区三区免费在线观看| 久久国产欧美| 国产精品99久久久久久人| 欧美一级黄色网| 日韩亚洲欧美成人| 欧美在线地址| 99在线视频精品| 久久久亚洲影院你懂的| 亚洲网址在线| 欧美成人午夜激情视频| 久久国产精品色婷婷| 欧美日本一区二区三区| 美女日韩在线中文字幕| 欧美视频免费| 亚洲激情欧美| 亚洲电影av在线| 亚洲欧美电影院| 一区二区三区产品免费精品久久75| 欧美一区二区三区视频免费播放 | 一区二区三区四区国产精品| 国产色综合天天综合网| 亚洲精品久久视频| 怡红院精品视频在线观看极品| 在线综合欧美| 一区二区欧美日韩| 欧美成人第一页| 久久夜色撩人精品| 国产精品欧美在线| 亚洲卡通欧美制服中文| 亚洲大胆人体在线| 久久裸体视频| 久久视频这里只有精品| 国产精品毛片高清在线完整版| 亚洲每日在线| 99精品欧美一区二区三区综合在线 | 国产亚洲精品久久久久婷婷瑜伽| 亚洲精品乱码久久久久久日本蜜臀| 激情久久久久久久| 久久久精品网| 久久婷婷蜜乳一本欲蜜臀| 国产日韩欧美在线播放不卡| 国产精品99久久久久久久久久久久| 亚洲三级观看| 欧美激情在线观看| 亚洲黄色三级| 亚洲一区二区三区精品动漫| 欧美理论电影网| 99热这里只有成人精品国产| 一区电影在线观看| 欧美日韩一区二区在线观看| 91久久精品日日躁夜夜躁国产| 亚洲精品国产精品久久清纯直播 | 欧美中文在线免费| 欧美诱惑福利视频| 国产欧美日韩激情| 欧美在线免费播放| 免费欧美日韩| 9色精品在线| 国产精品一区二区三区免费观看| 亚洲女同同性videoxma| 久久嫩草精品久久久久| 亚洲国产精品999| 欧美精品久久天天躁 | 欧美 日韩 国产一区二区在线视频 | 久久久久天天天天| 久久免费视频网| 亚洲黄色一区| 欧美日韩在线精品| 亚洲欧美日本国产专区一区| 久久综合中文| 一区二区三区国产在线观看| 国产精品久久久久毛片软件| 欧美一区国产在线| 亚洲激情成人网| 午夜精品久久久久久久久| 激情五月***国产精品| 老色鬼精品视频在线观看播放| 亚洲精品一级| 另类国产ts人妖高潮视频| 亚洲视频大全| 亚洲春色另类小说| 国产精品久久久久久久久果冻传媒| 欧美一级日韩一级| 亚洲精品一区二| 麻豆91精品| 亚洲在线一区二区三区| 亚洲国产精品成人综合色在线婷婷| 欧美日韩国产首页| 久久久午夜电影| 亚洲综合不卡| 亚洲人成在线观看一区二区| 久久精品中文字幕一区二区三区| 亚洲精品久久久久久久久久久久| 国产麻豆精品久久一二三| 欧美精品久久久久久| 久久精品导航| 欧美久久久久久蜜桃| 中文国产一区| 亚洲欧美日韩精品久久亚洲区 | 久久久久免费观看| 亚洲视频电影图片偷拍一区| 一区二区三区在线不卡| 国产精品视频一二| 欧美大片免费久久精品三p| 欧美影视一区| 午夜在线成人av|