IPv4套接字地址结构:

套接字都需要有一个指向套接字地址结构的指针作为参数。每个协议簇都定义它自己的套接字地址结构。这些结构的名字均已sockaddr_开头,并以对应每个协议族的唯一后缀结尾。

windows引入了winsock2后,程序在link时需要的库文件也发生了变化。winsock.h对应的是wsock32.lib,而winsock2需要的是ws2_32.lib。这是需要注意的地方,否则连编会失败。同时,有些程序是include了<windows.h>。这个头文件本身包含了<winsock.h>,这是就需要注意include的顺序,<winsock2.h>必须在<windows.h>之前include,才能避免重复定义的问题。

#include <WINSOCK2.H>

#pragma comment(lib,"ws2_32.lib")

#include <WINSOCK.H>

#pragma comment(lib,“wsock32.lib”)

#include <WINSOCK2.H>

#include <WINSOCK.H>

--WINDOWS下的IPv4结构:<winsock2.h>

l in_addr是一个结构体表示地址信息,其中in_addr.s_addr表示一个网络序形式的IPv4地址,可以使用inet_addr()函数对点式地址进行转换。

l 其中sockadr_in表示IPv4的SOCKET地址结构,IPv6不能用;

--UNIX下的IPv4结构:<netinet/in.h>

struct in_addr { /* 32-bit IPv4 address */

in_addr_t s_addr; /* network byte ordered */

};

struct sockaddr_in {

uint8_t sin_len; /* length of structure(16) */

sa_family_t sin_family; /* AF_INET */

in_port_t sin_port; /* 16-bit TCP or UDP port number */

/* network byte ordered */

struct in_addr sin_addr; /* 32-bit IPv4 address */

/* network byte ordered */

char sin_zero[8]; /* unused */

}

--通用套接字地址结构:UNIX:<sys/socket.h>

当作为一个参数传递进任何套接字函数时,套接字地址结构总是以引用形式(也就是以指向该结构的指针)来传递。然而以这样的指针作为参数之一的任何套接字函数必须处理来自所有支持的任何协议簇的套接字地址结构。

于是定义了这样的地址结构:

于是套接字函数被定义为以指向某个通用套接字结构的一个指针作为其参数之一,这正如bind函数的ANSI C函数原型所示:

这就要求对这些函数的任何调用都必须要将指向特定于协议的套接字地址结构的指针进行强制类型转换,变成指向某个通用套接字地址结构的指针。

--UNIX下的IPv6结构:<netinet/in.h>

struct in6_addr { /* 128-bit IPv6 address */

unit8_t s6_addr; /* network byte ordered */

};

struct sockaddr_in {

uint8_t sin6_len; /* length of structure(28) */

sa_family_t sin6_family; /* AF_INET */

in_port_t sin6_port; /* 16-bit TCP or UDP port number */

/* network byte ordered */

unit32_t sin6_flowinfo; /* flow information, undifined */

struct in6_addr sin6_addr; /* 128-bit IPv6 address */

/* network byte ordered */

uint32_t sin6_scope_id; /* set of interface for a scope */

}

--WINDOWS下的IPv6结构:#include <ws2tcpip.h>

当我们创建SOCKET时,启用AF_INET则表示IPv4,启用AF_INET6则表示IPv6;

IPv4&&IPv6地址结构分析的更多相关文章

  1. IP地址(IPv4)/IPv6地址的正则表达式

    原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...

  2. 网络编程中常见地址结构与转换(IPv4/IPv6)

    1. sockaddr/sockaddr_in/in_addr (IPv4).sockaddr6_in/in6_addr/addrinfo (IPv6) struct sockaddr { unsig ...

  3. 校验IPv4和IPv6地址和URL地址

    1.校验IPV4地址: function validateIp(obj) { var ip=$(obj).val(); var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;// ...

  4. PHP中有关IPV4 和IPV6地址转换以及其它一些常见问题

    这里主要介绍一下 IPV4 / IPV6 在 PHP / MySQL 中如何转换.以及中间容易碰到的一些问题. 首先介绍两个函数: ip2long:将 IPV4 的字符串互联网协议转换成长整型数字 i ...

  5. IPv4 和 IPv6地址

    目前Internet上使用的基本都是IPv4地址,也就是说地址总共是32个比特位,也就是32位二进制数.  所以IPv4地址总的容量是 2的32次方 = 4294967296 比如 11010010 ...

  6. (转)协议森林04 地址耗尽危机 (IPv4与IPv6地址)

    协议森林04 地址耗尽危机 (IPv4与IPv6地址) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! IP地址是IP协议的重要组 ...

  7. IP协议/地址(IPv4&IPv6)概要

    IP协议/地址(IPv4&IPv6)概要 IP协议 什么是IP协议 IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议. [1] 协议的特征 无连 ...

  8. ipv4理论知识1-ipv4介绍,ipv4记法,地址段个数算法

    定义 在TCP/IP协议中,用于在IP层识别连接到因特网设备的标识符称为因特网地址或IP地址.IPv4地址是一个32位的地址. 地址空间 像IPv4这种定义了地址的协议都有一个地址空间.地址空间就是协 ...

  9. win10 localhost 解析为 ipv6地址 ::1 的解决办法

    今天遇到个奇怪的问题,localhost 访问时提示 not found 404,但是有127.0.0.1可以访问.最后找到原因,是因为 windows 把 localhost 解析为 ipv6 地址 ...

随机推荐

  1. vue打包优化

    网站首页第一次加载很慢,优化过后从十多二十秒缩短到了几秒,主要是打包的时候按需加载了,然后使用了gzip压缩. 这是优化之前的 发现vendor特别大,所有引用的第三方库都会打到这个包里面;另外就是之 ...

  2. Java 从原字符串中截取一个新的字符串 subString()

    Java 手册 substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串从指定索引处的字符开始,直 ...

  3. Bootstrap-Plugin:弹出框(Popover)插件

    ylbtech-Bootstrap-Plugin:弹出框(Popover)插件 1.返回顶部 1. Bootstrap 弹出框(Popover)插件 弹出框(Popover)与工具提示(Tooltip ...

  4. android studio 3.0.1使用笔记(一)20171231

    首先安装JDK1.8.1并设置环境变量JAVA_HOME(C:/JAVA/JDK)及PATH(;%JAVA_HOME%\bin ) 然后安装AS 然后首次AS运行并退出,将GRADLE-4-1.ZIP ...

  5. python twilio 短信群发 知识留存

    1. win7 32位系统,傻瓜安装Anaconda2(python 2.7) 2. 打开cmd, 输入命令pip install twilio,在线安装twilio 3. 打开Anaconda2的S ...

  6. C入门程序整体框架图

    0.1:概述, 从头开始介绍一门编程语言总是显得很困难,因为有许多的细节还没有介绍,很难让读者在大脑中形成一幅完整的图, 所以起步时以一个列程序向学折介绍大体的C,试图使大家对C有一个整体大概 影响. ...

  7. css 积累1

    1.position 取值. 通常的回答是 static.relative.absolute 和 fixed .当然,还有一个极少人了解的 sticky .其实,除此之外, CSS 属性通常还可以设置 ...

  8. 【转】mac os、linux及unix之间的关系

    mac os.linux及unix之间的关系   unix 是由贝尔实验室开发的多用户.多任务操作系统 linux是一类Unix操作系统的统称,严格来说,linux系统只有内核叫“linux”,而li ...

  9. JSP中内置对象pageContent的使用

    public class TestPageContext { public void getSomething(PageContext page){ ServletRequest request = ...

  10. ADT下载地址整理(转)

    转自: http://blog.csdn.net/xqf222/article/details/9821971 参考下面文章 http://developer.android.com/tools/sd ...