文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言实例解析IPv6下的VC网络编程2
精品推荐
特别推荐
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
·DENX U-Boot及Linux使用手册
·EZ-USB 68013A开发指南
·图象处理中的边缘检测------canny算子
·Visual C++ ADO数据库编程入门
·利用 wordXP 实现自动排班
·UDT协议-基于UDP的可靠数据传输协议
·XPCOM--LINUX下的组件开发技术
·MyEclipse JSF 快速入门中文版(上)
·samba和openldap结合实战
·AIX 5L 学习大纲/简易教程(1)(未经许可,请勿COPY)
·Microsoft Windows XP Embedded 开发工具概述
·eMbedded Visual C++开发入门
·在VC6中创建wxWidgets项目[附图]
·数值计算程序大放送-线性代数方程组
·列表视图控件
·visual studio 2005 简体中文团队开发版 SQL server 2005简体中文版下载
·Visual Studio 2005:在 Visual C++ 中开发自定义的绘图控件
·汇编语言工具下载
·多文档界面(MDI)

实例解析IPv6下的VC网络编程2

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]


实例解析IPv6下的VC网络编程2

实例篇

  IPv6程序相对于IPv4改动并不大。其中主要的改动就是地址结构与地址解析函数。在RFC中详细说明了socket api 为适应IPv6所做的改动。而且windows平台与Linux平台在实现上也几乎是一样的。只不过头文件与支持程度等有所不同罢了(具体请参见RFC 2553与RFC 2292)。如读者有兴趣的话可以找RFC来看看,在这里就不再详细说明,只讲最简单的原理与例子,同时例出各主要socket api,如何使用,可以参考MSDN或是Linux中的MAN。


  地址表示

  IPv4使用32bits的地址表示,并有sockaddr_in和in_addr等结构应用于API中,而IPv6 使用128 bits 地址,也定义了本身的地址结构sockaddr_in6和in6_addr。


struct sockaddr_in {
u_char sin_len;
u_char sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

struct in_addr {
u_int32_t s_addr;
}

struct sockaddr_in6 {
u_char sin6_len;
u_char sin6_family;
u_int16_t sin6_port;
u_int32_t sin6_flowinfo;
struct in6_addr sin6_addr;
u_int32_t sin6_scope_id;
}

struct in6_addr {
u_int8_t __u6_addr8[16];
}


  IP V4/IP V6专用函数

  IPv6 API中一部分沿用了IPv4 API, 也新增了一些IPv6专用API,为使得程序具有更大的通用性,尽量避免使用IPv4专用函数,这些函数如下:

IP V4专用 是对应的IP v4/v6通用函数 功能说明
inet_aton( ) inet_ntop( ) 字符串地址转为IP地址
inet_ntoa( ) inet_pton( ) IP地址转为字符串地址
gethostbyname( ) Getipnodebyname( ) 由名字获得IP地
gethostbyaddr( ) struct hostent *getipnodebyaddr( ) IP地址获得名字
  getaddrinfo( ) 获得全部地址信息
  getnameinfo( ) 获得全部名字信息
未发生变化的函数 功能说明
socket( ) 建立Socket
bind( ) Socket与地址绑定
send( ) 发送数据(TCP)
sendto( ) 发送数据(UDP)
receive( ) 接收数据(TCP)
recv( )  接收数据(UDP)
accept( ) 接收连接
listen( ) 网络监听

  如上表格所示,IP V4专用函数在IP V6环境下已经不能使用,他们一般有一个对应的IP V4/V6通用函数,但是在使用通用函数的时候需要一个协议类型参数(AF_INET/AF_INET6)。另外还增加了两个功能强大的函数getaddrinfo( )和getnameinfo( ),几乎可以完成所有的地址和名字转化的功能。

  Windows平台IPv6程序一例

  下面我将给出windows平台下的一个例子。

  系统平台:windows 2000 professional SP3+tpipv6-001205-SP3-IE6+VC6

  说明:在本程序中只采用一个SOCKET,用WSAAsyncSelect来完成收与发的处理,为了方便起见,采用UDP方式。同时只专注IPv6的写法,不考虑函IPv4/IPv6兼容。如何编写IP无关的程序,有机会再另行撰文。
注:由于windows2000只是提供了IPv6的技术预览版,所以在有些地方支持上并不好。比如win2k在recvfrom的实现上好像有点问题,而linux中同样的代码却没问题。两者在recv的实现上都很正常。所以如果要开发程序最好是在window xp或是linux上进行。

  下面是程序中关键的几步:

  1.头文件的引入


#include
#include
#include "tpipv6.h" // Form IPv6 Tech Preview.(可以从tpipv6-001205-SP3-IE6安装后所在目录里找到)
#pragma comment(lib,"ws2_32")//引入库函数。

 


 2.建SOCKET UpdateData(TRUE);

memset(&hints,0,sizeof(hints));
//hints.ai_family=PF_UNSPEC;//这样可以由系统自己进行判断,这里我们直接指定是IPV6
hints.ai_family=AF_INET6;//指定用IPV6协议
hints.ai_socktype=SOCK_DGRAM;
hints.ai_protocol=IPPROTO_UDP;//用UDP
hints.ai_flags=AI_NUMERICHOST;//IP用数字表示
rc=getaddrinfo((LPCTSTR )m_send,"2000",&hints,&res);//解析地址
if(rc!=0)
{
AfxMessageBox("fail");
return;
}
s_send=socket(res->ai_family,res->ai_socktype,res->ai_protocol);//建socket
if(s_send==INVALID_SOCKET)
{
AfxMessageBox("建本机发socket失败");return ;}
else
{
AfxMessageBox("建本机发socket成功");
//绑定本地监听端口bind
if(bind (s_send,res->ai_addr,res->ai_addrlen)==SOCKET_ERROR)
AfxMessageBox("bind失败");
else
{AfxMessageBox("bind成功");GetDlgItem(IDOK)->EnableWindow (TRUE); }
}
if ( WSAAsyncSelect( s_send, m_hWnd, UM_PACKET, FD_READ ) == SOCKET_ERROR )//异步选择
{
MessageBox( "WSAAsyncSelect failed" );
closesocket( s_send );
return;
}


[1] [2] 下一页 




上一篇:DIY装机过程图解简述(硬件基础)

下一篇:[分形]DLA团簇模型的摸拟

实例解析IPv6下的VC网络编程2 相关文章:
·DIV CSS网页布局实例:十步学会用CSS建站
·网络玄幻小说十大网站
·国内大学校园网网络建设方案参考
·Photoshop实例:制作超酷影片画面场景
·Photoshop精细抠像实例
·屏蔽五项网络功能 让XP系统极速狂飙
·socket编程原理
·中小企业整体网络安全解决方案解析
·从零开始学黑客:网络黑客新手入门指南
·魔法门7 攻略解析
实例解析IPv6下的VC网络编程2 相关软件:
·网络常见问题与故障1000例
·中文版Excel 2003实例与技巧
·Flash MX 动画制作实例教程
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·网络神偷10.4 版
·盈速通网络加速器V1.2
·高级计算机网络
·红太阳网络电视v17.3
·中文版 AutoCAD2004 应用实例与技巧
·PhotoShop7 设计百例 + 经典实例教程 + 滤镜教学

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot