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. Unicode化

    为了程序编写方便,根除乱码问题等等需求,很多新项目都采用了Unicode编码.同时,不少使用MBCS多字节编码的旧项目为了升级,也有了转向Unicode编码的意向.不过,从MBCS升级到Unicode ...

  2. KMP算法解释

    给定两个字符串A,B,判断T是否为S的子串(变式:寻找子串B在串A中的位置). 要求一个O(|A|+|B|)的做法. 通常称A为目标串(或主串),B为模式串. 算法过程: 我们假设串A的长度为n,串B ...

  3. ASP.NET Web Pages

    ylbtech-.Net-ASP.NET Web Pages: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返 ...

  4. 学习笔记之PHP

    学习 PHP,第 1 部分: 注册帐户.上传需要批准的文件.并查看和下载已批准的文件 https://www.ibm.com/developerworks/cn/opensource/tutorial ...

  5. Chrome JS断点调试技巧

    Chrome调试折腾记_(2)JS断点调试技巧 技巧一:格式化压缩代码 技巧二:快速跳转到某个断点的位置 技巧三:查看断点内部的作用范围[很实用] 技巧4:监听事件断点 技巧5:DOM及 XHR监听跳 ...

  6. Hive插入数据的几种常用方法

    Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在 ...

  7. 浅谈Laravel框架的CSRF

    前文 CSRF攻击和漏洞的参考文章: http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html Laravel默认是开启了CSRF功能, ...

  8. user_add示例

    #!/usr/bin/python3# -*- coding: utf-8 -*-# @Time    : 2018/5/28 16:51# @File    : use_test_add.py 数据 ...

  9. python中模拟进行ssh命令的执行

    在进行socket编程的时候,可以实现远程执行命令,然后返回相关的结果,但是这种...很容易就把服务器搞挂了. 在这里需要用到commands模块,commands模块中有一个方法为getstatus ...

  10. JS: 如何计算一个月有多少天

    转自:https://www.2cto.com/kf/201806/755776.html 1 function getCountDays() { var curDate = new Date(); ...