• <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>

            chaosuper85

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              118 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks
            sendto() 和 recvfrom()函數(shù)   “這很不錯(cuò)啊”,你說,“但是你還沒有講無(wú)連接數(shù)據(jù)報(bào)套接字呢?” 沒問題,現(xiàn)在我們開始這個(gè)內(nèi)容。 既然數(shù)據(jù)報(bào)套接字不是連接到遠(yuǎn)程主機(jī)的,那么在我們發(fā)送一個(gè)包之 前需要什么信息呢? 不錯(cuò),是目標(biāo)地址!看看下面的: int sendto(int sockfd, const void *msg, int len, unsigned int flags,   const struct sockaddr *to, int tolen); 你已經(jīng)看到了,除了另外的兩個(gè)信息外,其余的和函數(shù) send() 是一樣 的。 to 是個(gè)指向數(shù)據(jù)結(jié)構(gòu) struct sockaddr 的指針,它包含了目的地的 IP 地址和端口信息。tolen 可以簡(jiǎn)單地設(shè)置為 sizeof(struct sockaddr)。 和函數(shù) send() 類似,sendto() 返回實(shí)際發(fā)送的字節(jié)數(shù)(它也可能小于 你想要發(fā)送的字節(jié)數(shù)!),或者在錯(cuò)誤的時(shí)候返回 -1。 相似的還有函數(shù) recv() 和 recvfrom()。recvfrom() 的定義是這樣的: int recvfrom(int sockfd, void *buf, int len, unsigned int flags,  struct sockaddr *from, int *fromlen); 又一次,除了兩個(gè)增加的參數(shù)外,這個(gè)函數(shù)和 recv() 也是一樣的。from 是一個(gè)指向局部數(shù)據(jù)結(jié)構(gòu) struct sockaddr 的指針,它的內(nèi)容是源機(jī)器的 IP 地址和端口信息。fromlen 是個(gè) int 型的局部指針,它的初始值為 sizeof(struct sockaddr)。函數(shù)調(diào)用返回后,fromlen 保存著實(shí)際儲(chǔ)存在 from 中的地址的長(zhǎng)度。 recvfrom() 返回收到的字節(jié)長(zhǎng)度,或者在發(fā)生錯(cuò)誤后返回 -1。 記住,如果你用 connect() 連接一個(gè)數(shù)據(jù)報(bào)套接字,你可以簡(jiǎn)單的調(diào) 用 send() 和 recv() 來滿足你的要求。這個(gè)時(shí)候依然是數(shù)據(jù)報(bào)套接字,依 然使用 UDP,系統(tǒng)套接字接口會(huì)為你自動(dòng)加上了目標(biāo)和源的信息。 -------------------------------------------------------------------------------- close()和shutdown()函數(shù)   你已經(jīng)整天都在發(fā)送 (send()) 和接收 (recv()) 數(shù)據(jù)了,現(xiàn)在你準(zhǔn)備關(guān) 閉你的套接字描述符了。這很簡(jiǎn)單,你可以使用一般的 Unix 文件描述符 的 close() 函數(shù):   close(sockfd); 它將防止套接字上更多的數(shù)據(jù)的讀寫。任何在另一端讀寫套接字的企 圖都將返回錯(cuò)誤信息。 如果你想在如何關(guān)閉套接字上有多一點(diǎn)的控制,你可以使用函數(shù) shutdown()。它允許你將一定方向上的通訊或者雙向的通訊(就象close()一 樣)關(guān)閉,你可以使用: int shutdown(int sockfd, int how); sockfd 是你想要關(guān)閉的套接字文件描述復(fù)。how 的值是下面的其中之 一:   0 – 不允許接受   1 – 不允許發(fā)送   2 – 不允許發(fā)送和接受(和 close() 一樣) shutdown() 成功時(shí)返回 0,失敗時(shí)返回 -1(同時(shí)設(shè)置 errno。) 如果在無(wú)連接的數(shù)據(jù)報(bào)套接字中使用shutdown(),那么只不過是讓 send() 和 recv() 不能使用(記住你在數(shù)據(jù)報(bào)套接字中使用了 connect 后 是可以使用它們的)。 -------------------------------------------------------------------------------- getpeername()函數(shù)   這個(gè)函數(shù)太簡(jiǎn)單了。 它太簡(jiǎn)單了,以至我都不想單列一章。但是我還是這樣做了。 函數(shù) getpeername() 告訴你在連接的流式套接字上誰(shuí)在另外一邊。函 數(shù)是這樣的: #include int getpeername(int sockfd, struct sockaddr *addr, int *addrlen); sockfd 是連接的流式套接字的描述符。addr 是一個(gè)指向結(jié)構(gòu) struct sockaddr (或者是 struct sockaddr_in) 的指針,它保存著連接的另一邊的 信息。addrlen 是一個(gè) int 型的指針,它初始化為 sizeof(struct sockaddr)。 函數(shù)在錯(cuò)誤的時(shí)候返回 -1,設(shè)置相應(yīng)的 errno。 一旦你獲得它們的地址,你可以使用 inet_ntoa() 或者 gethostbyaddr() 來打印或者獲得更多的信息。但是你不能得到它的帳號(hào)。(如果它運(yùn)行著愚 蠢的守護(hù)進(jìn)程,這是可能的,但是它的討論已經(jīng)超出了本文的范圍,請(qǐng)參 考 RFC-1413 以獲得更多的信息。) -------------------------------------------------------------------------------- gethostname()函數(shù)   甚至比 getpeername() 還簡(jiǎn)單的函數(shù)是 gethostname()。它返回你程 序所運(yùn)行的機(jī)器的主機(jī)名字。然后你可以使用 gethostbyname() 以獲得你 的機(jī)器的 IP 地址。   下面是定義:   #include int gethostname(char *hostname, size_t size); 參數(shù)很簡(jiǎn)單:hostname 是一個(gè)字符數(shù)組指針,它將在函數(shù)返回時(shí)保存 主機(jī)名。size是hostname 數(shù)組的字節(jié)長(zhǎng)度。 函數(shù)調(diào)用成功時(shí)返回 0,失敗時(shí)返回 -1,并設(shè)置 errno。 --------------------------------------------------------------------------------
            posted on 2010-01-16 21:45 chaosuper 閱讀(131) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            狠狠久久亚洲欧美专区| 国内精品久久久久久中文字幕| 99久久精品毛片免费播放| 久久久久人妻一区二区三区vr| 一本综合久久国产二区| 国产精品久久久香蕉| 99精品国产99久久久久久97| 色88久久久久高潮综合影院| 国产免费福利体检区久久| 久久久久亚洲AV成人网人人软件| 久久人人爽人人爽AV片| 精品综合久久久久久97| 国产精品成人久久久久三级午夜电影 | 2020久久精品亚洲热综合一本| 久久中文字幕精品| 国产精品日韩欧美久久综合| 欧美大香线蕉线伊人久久| 亚洲国产天堂久久综合| 久久99精品国产99久久| 国产精品美女久久久| 无码人妻精品一区二区三区久久 | 亚洲欧洲精品成人久久曰影片| 久久综合九色综合网站| 亚洲色欲久久久综合网东京热| 久久国产成人| 四虎国产精品成人免费久久 | 女人香蕉久久**毛片精品| 7777久久久国产精品消防器材| 国产亚洲精久久久久久无码77777| 久久福利片| 久久99精品久久久久久hb无码 | 久久精品国产2020| 国产99精品久久| 国内精品久久久久久久久电影网| 99久久精品国产毛片| 亚洲精品高清国产一线久久| 性欧美大战久久久久久久久| 国产高潮国产高潮久久久| 99999久久久久久亚洲| 久久精品无码av| 久久99国产精品久久99果冻传媒 |