999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

兼容IPv4與IPv6 的Winsock網絡編程研究

2009-03-02 09:33:12郭靜盈
現代電子技術 2009年4期

摘 要:在分析IPv4和IPv6編程接口基礎上,給出了一組兼容IPv4與IPv6的Winsock網絡編程規則, 并敘述IPv6在WindowsXP系統下的安裝和配置過程, 最后給出了一個可同時應用于IPv4和IPv6的實現Daytime協議的程序,此程序今后可以方便地進行其他應用協議及軟件的移植,以適應IPv6的快速發展。

關鍵詞:IPv6;Winsock;TCP;API;Daytime協議;網絡編程

中圖分類號:TP393 文獻標識碼:A 文章編號:1004-373X(2009)04-105-03

Research of Winsock Network Programming Compatible with IPv4&IPv6;

GUO Jingying

(Institute of Information and Control Engineering,Xi′an University of Architecture and Technology,Xi′an,710055,China)

Abstract:This article analyses the differences between IPv4 APIs and IPv6 APIs.On this basis,a set of Winsock programming rules with the IP version-compatible are given.Then it introduces how to install and configure IPv6 in Windows XP OS.Finally it gives a program to achieve Daytime protocol with the IP version-compatible.This process can transplant other application agreements and softwares easily in future to accommodate the rapid development of IPv6.

Keywords:IPv6;Winsock;TCP;API;Daytime protocol;network programming

0 引 言

隨著通信技術和網絡技術的飛速發展,特別是近年來,IPv4協議面臨著一些難以解決的問題,如地址短缺、缺乏服務質量控制QoS和安全性差等。為了應對這一挑戰,IETF(Internet Engineer Task Force) 組織提出了為適應未來對于網絡基礎設施數量和質量需求而設計的下一代互聯網協議IPv6。IPv6繼承了IPv4的優點,并根據IPv4多年來運行的經驗進行了大幅度的修改和功能擴充,其擴展性、路由、安全性、配置和可靠性都有明顯改進。

1 IPv6相對于IPv4 WinSock的改變

1.1 IPv6中新增加的常量

為了支持IPv6,需要定義一個新的地址族名,以便正確地識別和解析IPv6的地址結構。同樣,還需要定義一個新的協議簇名(與地址族名具有相同的值),這樣就可以使用合適的協議創建一個套接字。新定義的IPv6地址簇名和協議簇名常量為: AF_ INET6和PF_ INET6。

1.2 IPV6中新增加的地址結構

IPv6的地址結構通過struct in6_addr和struct sockaddr_in6定義,結構定義分別如下:

struct in6_addr {

u_chars6_addr[16];//IPv6地址

};

struct sockaddr_in6

{

u_char sin6_len; //地址長度

u_char sin6_family; // IP地址族,必須為AF_INET6

u_short sin6_port;//端口號,和IPv4中意義相同

u_long sin6_flowinfo; //標記連接通信量

struct in6_addr sin6_addr;//128位的IPv6網絡地址

u_long sin6_scope_id;//地址接口識別號

};

1.3 IPV6中新增加的域名解析函數

IPv6引入了名為getaddrinfo()和getnameinfo()的新的API。這兩個API是與協議無關的,且既可用于IPv4,也可用于IPv6的名稱解析。getaddrinfo()函數的返回值是addrinfo的結構指針。

addrinfo結構如下所示:

struct addrinfo {

int ai_flags;//地址信息標志

int ai_family; //地址簇,對于IPv6地址必須是AF_INET6

int ai_socktype; //sodket類型,字節流用SOCK-STREAM,數據報用SOCK-DGRAM

int ai_protocol;//TCP協議用IPPROTO-TCP,UDP協議用IPPROTO-UDP

size-t ai_addrlen; //ai-addr地址長度

char *ai_canonname;//規范名

struct sockaddr *ai_addr; //地址

struct addrinfo *ai_next;//指向下一個結構信息指針

};

getaddrinfo()函數原型如下:

getaddrinfo(

IN const char FAR *nodename, //主機名地址或者是IP地址

IN const char FAR *servname,//服務名或十進制端口號

IN const struct addrinfo FAR *hints,// 指向addrinfo結構的指針

Out struct addrinfo FAR *FAR *res

);

getaddrinfo()函數可以把主機名或服務名轉換成一組socket地址。 hints相當于一個過濾器,只有符合hints結構的內容才會返回到res指針中。執行成功后,參數res以鏈表的形式返回解析出來的地址,可以將這些地址直接傳遞給bind(),connect(),sendto()等函數。

地址到名稱的轉換可以通過另一個新的套接字函數getnameinfo()進行。getnameinfo()函數的功能與getaddrinfo()函數相反,該函數接受已經初始化的套接字結構,并返回與地址及端口信息對應的主機和服務.

2 兼容IPv4與IPv6的WinSock網絡編程規則

2.1 使用sockaddr_storage結構

sockaddr_storage結構是新的套接字結構,它與協議無關,并擁有充分的地址空間容納IPv4或者IPv6地址信息,且可以很方便地轉換成sockaddr_in結構和sockaddr_in6結構。同時,這個結構還具有針對64位對齊問題的填充項,使用這個結構可以很容易地寫出與地址協議簇無關和跨平臺的程序代碼,因此編寫兼容IPv4與IPv6的網絡程序時要使用這個結構表示網絡地址。

sockaddr_storage結構定義如下:

struct sockaddr_storage{

u_char ss_len;

u_char ss_family;

u_char padding[128-2];

};

2.2 使用新的名稱解析函數getaddrinfo()和getnameinfo()

這兩個函數是隨IPv6引進的新的名稱解析函數,與地址協議簇無關,隱藏了名字到地址轉換和地址到名字轉換的大量細節,既能夠處理IPv6地址,也能處理IPv4地址。它們也替代性地實現了下列函數接口的功能:gethostbyname(),gethostbyaddr(),inet_ntoa(),inet_aton(),getservbyname(),getservbyport()。可以在簡化程序的同時實現與地址協議簇無關的編程,還可以提高程序的可移植性。

3 IPv4與IPv6雙協議試驗平臺的搭建

由于大部分用戶的操作系統都是Windows XP,所以在此僅介紹Windows XP下IPv6的安裝與配置。

Windows XP操作系統內置了IPv6協議棧,提供了一組命令行方式的IPv6檢測配置工具。在XP下安裝IPv6協議后,對原IPv4協議的使用不產生任何影響,整個網絡上各終端設備能夠在一個物理網絡上共享IPv4和IPv6協議,并支持2種協議的數據傳輸,即:所謂的雙棧(DualStack)共享。

安裝IPv6協議和配置地址及默認網關的過程如下:

D:\>ipv6 install

Installing….

Succeeded.

D:\>netsh

netsh>interface ipv6 add address "本地連接" 2008::a:20

確定

netsh>interface ipv6 add route::/0 "本地連接" 2008::a:20 publish=yes

確定

netsh>quit

D:\>

在安裝和配置完成后,可使用ping6和tracert6命令檢測網絡連通和路由狀態。

4 VC環境下Daytime協議的實現

根據以上所述,下面開發一個可同時應用于IPv4和IPv6的實現Daytime協議的程序。該程序基于C/S結構,客戶端使用TCP協議連接到服務器端,向服務器發送請求;服務器收到請求后,將當前的時間發回客戶端。

4.1 服務器端程序設計

服務器端首先啟動,通過調用socket()建立一個Socket,然后調用bind()將該Socket和本地網絡地址聯系在一起,再調用listen()使Socket做好偵聽的準備,并規定請求隊列的長度,之后就調用accept()接收連接。連接建立后,服務器端創建一個通信用的Socket, 把當前時間發回給客戶端。最后,在數據傳送結束后,調用close()關閉Socket。

服務器端設計過程如下:

(1) 創建服務器端套接字

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

hints.ai_family = PF_UNSPEC; //兼容IPv4與IPv6協議

hints.ai_socktype = SOCK_STREAM; //指定用字節流

hints.ai_protocol = IPPROTO_TCP; //指定用TCP協議

hints.ai_flags = AI_NUMERICHOST; //IP用數字表示

rc = getaddrinfo (NULL,"5001",&hints;,&res;); //解析本機地址

s_send= socket (res->ai_family,res->ai_socktype,res->ai_protocol); //創建用于連接的Socket

(2) 綁定本機監聽端口

rc=bind(s_send,res->ai_addr,res->ai_addrlen);

(3) 監聽并接收連接

listen(s_send,5);//創建連接隊列,開始監聽

new_fd=accept(s_send,(struct sockaddr*)&sin;,&sin;_len);//接受一個連接

(4) 處理連接,發回一個當前時間給客戶端

while (1) {

time(&now;);

pts = ctime(&now;);

send(new_fd,pts,strlen(pts),0);

closesocket(new_fd);

}

(5) 關閉套接字

close(s-send );

4.2 客戶端程序設計

客戶端創建一個Socket,并調用connect()和服務器建立連接。連接建立后,客戶端等待服務器返回的當前時間。最后,待數據傳送結束后,調用close()關閉Socket。

客戶端設計過程如下。

(1)創建客戶端套接字

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

hints.ai_family = PF_UNSPEC; //兼容IPv4與IPv6協議

hints.ai_socktype=SOCK_STREAM;//指定用字節流

hints.ai_protocol = IPPROTO_TCP; //指定用TCP協議

hints.ai_flags = AI_NUMERICHOST; //IP用數字表示

rc = getaddrinfo (NULL,“5001”,&hints;,&res;); //解析本機地址

s_send= socket (res->ai_family,res->ai_socktype,res->ai_protocol); //創建用于連接的socket

(2) 連接服務器

connect(s_send,res->ai_addr,res->ai_addrlen);

(3) 接收當前時間

cc = recv(s_send,buf,LINELEN,0);

(4) 關閉套接字

close (s-send);

5 程序運行后的結果

當服務器運行后,可同時在IPv4和IPv6地址監聽,客戶端向服務器發送請求,服務器接到請求后,向客戶端返回一個當前時間。此實驗達到了預期效果。

服務器端運行結果如圖1所示。

6 結 語

雖然IPv6網絡已經開始實驗性部署,但是IPv4網絡向IPv6網絡的過渡和互通仍有一定難度,IPv4和IPv6網絡還需共存一段時間,因此開發能夠同時支持IPv4和IPv6的網絡應用程序會變得越來越重要。

在此編寫了一個能夠同時支持IPv4和IPv6協議的程序,此程序可以方便地進行今后其他應用協議及軟件的移植,需在服務器端設計過程(4)及客戶端設計過程(3)中根據其具體協議及軟件進行相應改變。

參 考 文 獻

[1]RFC2292.Advanced Sockets API for IPv6[S].1998.

[2]RFC3493.Basic Socket Interface Extensions for IPv6[S].2003.

[3]COMER.TCP/IP網絡互連技術(卷3)[M].張衛,王能,譯.北京:清華大學出版社,2000.

[4]Stevens W R.TCP/IP詳解(卷3)[M].胡谷雨,譯.北京:機械工業出版社,2000.

[5]馬仝芬,付曉玲.IPv4與 IPv6兼容網絡編程模式[J].北方工業大學學報,2005(3):25-29.

[6]劉利強,吳永英,王勇智.IPv6下Socket網絡編程的研究與實現[J].計算機技術與發展,2006,16(6):201-203,206.

[7]朱坤華,朱國超.基于IPv6的網絡編程實例剖析[J].移動計算,2006(2):257-259.

[8]袁德明.用IPv6編程接口實現有連接通信的方法[J].計算機時代,2007(9):23-24,27.

作者簡介 郭靜盈 女,1983年出生,河南漯河人,碩士。主要研究方向為基于IPv6的Winsock網絡編程。

主站蜘蛛池模板: 免费 国产 无码久久久| 国产女同自拍视频| 国产美女丝袜高潮| 久久精品嫩草研究院| 亚洲精品无码日韩国产不卡| 国产不卡一级毛片视频| 一区二区在线视频免费观看| 成人国产一区二区三区| 亚洲无码精彩视频在线观看 | 国产精品久线在线观看| 成人字幕网视频在线观看| 中文无码精品A∨在线观看不卡 | 成年人国产视频| 亚洲高清在线播放| 青青青视频免费一区二区| 亚洲天堂网2014| 国产在线麻豆波多野结衣| 久久女人网| 67194亚洲无码| 一级毛片在线播放| 麻豆精品国产自产在线| 久久国产成人精品国产成人亚洲| 久青草免费视频| 久久久久九九精品影院 | 国产激情无码一区二区APP| 国产无码制服丝袜| www.亚洲国产| 久久久久青草大香线综合精品 | 伊人久久福利中文字幕| 欧美亚洲另类在线观看| 99久久国产综合精品2020| 亚洲人在线| 亚洲国产成人精品青青草原| 精品撒尿视频一区二区三区| 亚洲愉拍一区二区精品| 国产精品久久久久久久伊一| 久久免费成人| 亚洲福利视频一区二区| 欧美激情伊人| 又黄又湿又爽的视频| 无码AV动漫| 亚洲综合九九| 欧美黄网站免费观看| 秋霞国产在线| 99福利视频导航| 国产原创演绎剧情有字幕的| 亚洲成人在线免费| 2024av在线无码中文最新| 亚洲高清资源| 亚洲大学生视频在线播放| 亚洲国产系列| 国产理论精品| 免费毛片a| 亚洲中字无码AV电影在线观看| 亚洲精品自产拍在线观看APP| 午夜精品久久久久久久无码软件| 欧美一区二区自偷自拍视频| 亚洲另类色| 亚洲品质国产精品无码| 免费高清a毛片| 日韩最新中文字幕| 国产成人av一区二区三区| 一级毛片a女人刺激视频免费| 欧美成人国产| 国产福利观看| 亚洲av无码久久无遮挡| 日韩一级毛一欧美一国产| 国产亚洲精品97在线观看| 国产精品毛片在线直播完整版| 国产一级裸网站| 伊人激情综合| 欧美色亚洲| 精品第一国产综合精品Aⅴ| 国产日韩精品欧美一区喷| 国产91在线|日本| 日本三级欧美三级| 高清无码手机在线观看| 久久久久久久久久国产精品| 日本黄网在线观看| 久久精品只有这里有| 91色爱欧美精品www| 免费毛片全部不收费的|