• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設計應用 > 基于C++中的IPv6網絡程序設計

    基于C++中的IPv6網絡程序設計

    作者: 時間:2012-09-12 來源:網絡 收藏

    一>客戶機

    對于客戶機來說,不管是建立TCP/UDP 連接,它都應知道服務器的主機名或IP 地址,同時將服務器地址解析為IPv4或地址都可以,一般可以考慮一下步驟:

    SOCKET s;

    struct addrinfo,hints,*res=NULL;

    char *szRemoteAddrESS;//主機名或IP 地址

    char *szRemotePort;//端口號

    int rc;

    1.用getaddrinfo() 函數解析地址。hins結構中 使用AF_UNSPEC標志,便可以獲得地址簇類型(IPv4或)。

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

    hints.ai_family=AF_UNSPEC;

    hints.ai_socktype=SOCK_STREAM;

    hints.ai_protocol=IPPROTO_TCP;

    rc=getaddrinfo(szRemoteAdddress,szRemotePort,hints,res);

    if(rc==WSANO_DATA)

    {// 無法解析,出錯

    }

    用返回的addrinfo結構中的ai_family,ai_socketype,ai_protocol字段來創建套接字。

    s=Socket(res->ai_family,ai_socktype,res->protocol);

    if(s==INVALID_SOCKET)

    {//創建套接字失敗

    }

    2.使用返回的addrinfo結構中的ai_addr來調用其他函數(connect(),send()等).。

    rc==connect(s,res->ai_addr,res->addrlen);

    if(rc==SOCKET_error)

    {//連接失敗;

    }

    。。。//完成其他編程

    二>服務器

    服務器,應考慮到IPv4和 都具有各自的堆棧;因此如果服務器希望能同時接受IPv4和IPv6的連接,就必須能同時創建IPv4和IPv6套接字;一般可以考慮一下步驟:

    SOCKET socklisten[2];//*Socket變量

    char *szPort=”8080”;//*端口

    struct addinfo hints,*res=NULL,*ptr=NULL;

    int rc,i=0;

    1. 調用getaddrinfo()函數,該結構包含AI_PASSIVE,AF_UNSPEC標志,以及所需的套接字類型、協議及所需的本地端口(用來*和接受數據等)。函數將返回的兩個addrinfo結構,分別可用于IPv4和IPv6*地址: [Page]

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

    hints.ai_family=AF_UNSPEC;

    hints.ai_socktype=SOCK_STREAM;

    hints.ai_protocol=IPPROTO_TCP;

    hints.ai_flags=AI_PASSIVE;

    rc=getaddinfo(NULL,szPort,hints,res);

    if(rc!=0){//失敗處理;}

    ptr=res;

    2. 用返回的addrinfo結構中的ai_family,ai_socketype,ai_protocol字段來創建套接字后;便可以使用addrinfo結構中的ai_addr 和ar_addrlen 字段調用綁定函數bind()。

    while(ptr)

    {

    socklisten[i]=socket(ptr->ai_family,ptr->ai_socktype,ptr->ai_protocol);

    if(socklisten[i]==INVALID_SOCKET){//創建失敗處理;}

    rc=bind(socklisten[i],ptr->ai_addr,ptr->ai_addrlen);

    if(rc==SOCKET_Error){//綁定失敗處理}

    rc=listen(slisten[i],7)//開始*

    if(rc==SOCKET_ERROR){//*失敗處理}

    i++;

    ptr=ptr->ai_next;

    }

    。。。

    //完成其他編程



    關鍵詞: IPv6 網絡 程序設計

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 庆元县| 翼城县| 无棣县| 尚义县| 湛江市| 丹阳市| 蓝田县| 香港| 太仆寺旗| 蚌埠市| 英德市| 承德县| 翼城县| 大姚县| 周宁县| 寿阳县| 合作市| 柳州市| 徐州市| 习水县| 精河县| 巴马| 绍兴市| 凉城县| 万安县| 克什克腾旗| 福鼎市| 原平市| 小金县| 高密市| 襄垣县| 浦北县| 长沙市| 阿合奇县| 同心县| 陵川县| 扶余县| 甘孜| 合阳县| 波密县| 丹巴县|