<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于C++中的IPv6網(wǎng)絡(luò)程序設(shè)計

          基于C++中的IPv6網(wǎng)絡(luò)程序設(shè)計

          作者: 時間:2012-09-12 來源:網(wǎng)絡(luò) 收藏

          一>客戶機(jī)

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

          SOCKET s;

          struct addrinfo,hints,*res=NULL;

          char *szRemoteAddrESS;//主機(jī)名或IP 地址

          char *szRemotePort;//端口號

          int rc;

          1.用getaddrinfo() 函數(shù)解析地址。hins結(jié)構(gòu)中 使用AF_UNSPEC標(biāo)志,便可以獲得地址簇類型(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結(jié)構(gòu)中的ai_family,ai_socketype,ai_protocol字段來創(chuàng)建套接字。

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

          if(s==INVALID_SOCKET)

          {//創(chuàng)建套接字失敗

          }

          2.使用返回的addrinfo結(jié)構(gòu)中的ai_addr來調(diào)用其他函數(shù)(connect(),send()等).。

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

          if(rc==SOCKET_error)

          {//連接失敗;

          }

          。。。//完成其他編程

          二>服務(wù)器

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

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

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

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

          int rc,i=0;

          1. 調(diào)用getaddrinfo()函數(shù),該結(jié)構(gòu)包含AI_PASSIVE,AF_UNSPEC標(biāo)志,以及所需的套接字類型、協(xié)議及所需的本地端口(用來*和接受數(shù)據(jù)等)。函數(shù)將返回的兩個addrinfo結(jié)構(gòu),分別可用于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結(jié)構(gòu)中的ai_family,ai_socketype,ai_protocol字段來創(chuàng)建套接字后;便可以使用addrinfo結(jié)構(gòu)中的ai_addr 和ar_addrlen 字段調(diào)用綁定函數(shù)bind()。

          while(ptr)

          {

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

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

          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;

          }

          。。。

          //完成其他編程



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();