程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Beej’s Guide Network to Programming 系列連載10

Beej’s Guide Network to Programming 系列連載10

編輯:關於C語言

上一篇:http://www.BkJia.com/kf/201112/115217.html

5.3. bind() ---在那個端口?
       一旦你有一個套接字,你可能要將套接字和機器上的一定的端口關聯起來。(如果你想用listen()來偵聽一定端口的數據,這是必要一步---比如,開始玩多人網絡游戲告訴你要連接到192.168.5.10的3490端口) 使用的端口號是由內核相匹配傳入的數據包到某個進程的socket描述符。如果你只想用connect()(因為你是客戶端,不是服務器端),那麼這個步驟沒有必要。但是無論如何,請繼續讀下去。

       下面是他的原型:

#include<sys/types.h>

#include<sys/socket.h>

 

int bind(intsockfd, struct sockaddr *my_addr, int addrlen);

 

       sockfd是調用 socket() 返回的文件描述符。my_addr 是指向數據結構 struct sockaddr 的指針,它保存你的地址(即端口和 IP 地址) 信息。addlen是這個地址(struct socketaddr)的長度。

       簡單得很不是嗎? 再看看例子:

struct addrinfohints, *res;

int sockfd;

 

// first, load upaddress structs with getaddrinfo():

 

memset(&hints,0, sizeof(hints));

hints.ai_family =AF_UNSPEC; // use IPv4 or IPv6, whichever

hints.ai_socktype= SOCK_STREAM;          // TCP

hints.ai_flags =AI_PASSIVE;                  // fill in myIP for me

 

getaddrinfo(NULL, “3490”, &hints, &res);

 

// make a socket

 

sockfd =socket(res->ai_family, res->ai_socktype, res->ai_protocol);

 

// bind it to theport we passed in to getaddrinfo():

 

bind(sockfd,res->ai_addr, res->ai_addrlen);

 

       通過使用AI_PASSIVE標志,我告訴程序綁定到運行它的主機的IP 。如果你想綁定到一個特定的本地IP地址,刪除AI_PASSIVE然後賦值給getaddrinfo()函數的第一個參數。

       bind()如果返回-1表示出錯。

講解舊代碼部分省略…

 

摘自 xiaobin_HLJ80的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved