新聞中心

        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 網絡 程序設計

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 霸州市| 辉县市| 张掖市| 华亭县| 阳山县| 阿克苏市| 兴业县| 辽中县| 宣城市| 东莞市| 龙胜| 永和县| 昌江| 承德县| 阿荣旗| 伽师县| 乐山市| 广汉市| 德兴市| 如东县| 内丘县| 桂林市| 大石桥市| 涿州市| 蕲春县| 历史| 衡阳市| 抚顺县| 梧州市| 高雄市| 河源市| 敦煌市| 巴彦淖尔市| 宁津县| 当阳市| 恩施市| 揭西县| 商水县| 麟游县| 色达县| 丽江市|