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

隨筆 - 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>
            你懂的亚洲视频| 欧美日韩不卡在线| 午夜精品区一区二区三| 久久激情视频| 国产精品爱啪在线线免费观看| 国产午夜精品一区理论片飘花| 亚洲激情在线| 久久精品国产一区二区三区免费看| 亚洲第一福利视频| 欧美一级大片在线观看| 欧美成年人视频网站| 久久香蕉精品| 狠狠久久五月精品中文字幕| 亚洲欧美日韩国产成人| 91久久精品国产91久久| 久久久久九九视频| 国产视频在线观看一区二区三区| 久久久久久久高潮| 亚洲欧美综合精品久久成人| 欧美调教视频| 亚洲午夜精品在线| 亚洲日本成人女熟在线观看| 麻豆成人综合网| 亚洲国产成人高清精品| 久久综合一区二区| 久久国产精品久久w女人spa| 永久久久久久| 欧美国产日韩一区| 老司机午夜精品视频在线观看| 黄色av日韩| 一区二区三区欧美日韩| 欧美精品自拍| 亚洲天堂免费观看| 中文国产成人精品久久一| 欧美午夜一区二区| 欧美激情精品久久久久久大尺度| 国产精品xnxxcom| 欧美成人午夜| 99re热精品| 一区二区三区国产盗摄| 在线免费观看日本一区| 麻豆精品视频| 国产欧亚日韩视频| 老司机午夜精品视频| 国产精品福利久久久| 亚洲专区免费| 欧美亚洲视频一区二区| 黄色精品免费| 亚洲综合第一| 影音先锋日韩有码| 亚洲欧美久久| 午夜精品久久久久久久久| 久久不射中文字幕| 香蕉久久夜色精品国产使用方法| 欧美美女bbbb| 最新日韩av| 亚洲美女91| 亚洲免费在线观看视频| 亚洲午夜精品久久久久久浪潮| 欧美1区2区视频| 午夜精品剧场| 国产精品白丝av嫩草影院| 亚洲免费观看在线观看| 国产亚洲欧美日韩美女| 最新日韩在线| 一区二区精品在线观看| 久久av资源网站| 亚洲伦理在线免费看| 亚洲综合视频一区| 欧美久久成人| 99pao成人国产永久免费视频| av成人免费| 久久国产一区二区三区| 久久九九99视频| 国产亚洲一区二区三区在线观看| 欧美在线亚洲| 女女同性精品视频| 日韩视频中午一区| 国产精品美女久久久免费 | 免费日韩av| 亚洲电影免费在线观看| 99re热这里只有精品视频| 欧美日韩国产高清视频| 亚洲一区二区欧美日韩| 99精品国产福利在线观看免费| 欧美日韩不卡一区| 香蕉久久夜色精品| 欧美xart系列在线观看| 亚洲一级黄色片| 国产日韩欧美一区二区三区在线观看| 亚洲综合色丁香婷婷六月图片| 久久天天躁狠狠躁夜夜av| 国产精品视频九色porn| 99国产精品一区| 亚洲午夜精品一区二区三区他趣| 国产精品电影在线观看| 久久国产福利国产秒拍| 亚洲激情二区| 欧美中文字幕| 国产麻豆日韩| 性欧美videos另类喷潮| 亚洲成在人线av| 在线看日韩欧美| 欧美日韩中文字幕综合视频| 久久国产精品久久精品国产| 亚洲精品一区二区三区福利| 亚洲精品国产系列| 欧美激情中文不卡| 日韩一级精品| 女女同性女同一区二区三区91| 亚洲愉拍自拍另类高清精品| 亚洲国产毛片完整版| 国产老女人精品毛片久久| 欧美福利电影在线观看| 日韩视频免费观看| 美国十次成人| 一本色道久久综合亚洲精品婷婷| 国产午夜精品在线观看| 欧美日韩在线第一页| 亚洲一区二区在线播放| 亚洲精品少妇网址| 欧美国产日韩视频| 久久久一区二区| 亚洲电影免费观看高清完整版| 国产精品久久久久久久久搜平片 | 亚洲欧美日本国产专区一区| 亚洲激情电影中文字幕| 欧美ed2k| 欧美1区2区3区| 久久久欧美精品| 久久国产精品亚洲va麻豆| 亚洲欧美日韩国产综合| 亚洲午夜精品| 亚洲线精品一区二区三区八戒| 亚洲激情成人在线| 亚洲欧美中文另类| 亚洲午夜女主播在线直播| 久久综合色综合88| 欧美在线观看网站| 99国产精品久久久久久久久久| 亚洲第一福利社区| 亚洲电影av| 亚洲经典自拍| 亚洲精品影视在线观看| 99综合在线| 在线亚洲精品| 亚洲欧美在线看| 久久成年人视频| 久久久av网站| 蜜臀久久99精品久久久画质超高清 | 麻豆精品视频在线观看视频| 久久综合久久美利坚合众国| 久久婷婷综合激情| 奶水喷射视频一区| 欧美日韩综合视频网址| 国产精品久久久久久妇女6080| 欧美性大战久久久久久久| 国产精品午夜在线| 韩日欧美一区二区| 91久久精品www人人做人人爽| 国产精品永久| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 亚洲一区二区黄色| 久久久免费精品视频| 另类春色校园亚洲| 欧美日韩国产一区精品一区| 国产精品嫩草影院一区二区| 国产亚洲一区在线| 亚洲免费观看高清完整版在线观看熊 | 欧美成人69av| 国产精品久久看| 永久555www成人免费| 日韩午夜av| 久久精品夜色噜噜亚洲a∨| 欧美国产高清| 欧美成年人视频网站| 99综合精品| 久久精品视频免费观看| 欧美在线视频免费观看| 美女啪啪无遮挡免费久久网站| 欧美日韩的一区二区| 国产在线不卡精品| 99视频精品在线| 久久久夜精品| 中文国产亚洲喷潮| 免费观看30秒视频久久| 国产美女一区| 99riav久久精品riav| 久久久999成人| 一本一道久久综合狠狠老精东影业 | 亚洲国产日韩欧美一区二区三区| 免费一区二区三区| 亚洲亚洲精品在线观看 | 欧美午夜欧美| 亚洲黄一区二区| 久久免费视频在线观看| 亚洲午夜女主播在线直播| 欧美激情在线有限公司| 在线观看中文字幕不卡| 久久都是精品|