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. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  2. GIT的安装及上传代码到码云

    前言 昨天初次接触GIT及码云,虽然用了2个多小时才搞定,但是还是挺开心的.码云是一个可以储存我们写的代码的一个平台,而Git是一款免费.开源的分布式版本控制系统,可以敏捷高效地处理任何或小或大的项目 ...

  3. C# 基础备忘录

    1. decimal 类型调用ToString()方法后没把末尾的0去掉的解决办法: 例子:decimal? money = Convert.ToDecimal(10.8950); string mo ...

  4. python3_爬虫_爬百度音乐

    工具及环境 1.操作系统:windows 64位系统 2.软件工具:谷歌浏览器.pycharm集成开发工具 3.第三方库:request 注:如果第三方库搭建有困难,请看博客:https://www. ...

  5. mysql迁移之巨大数据量快速迁移方案

    mysql迁移之巨大数据量快速迁移方案-增量备份及恢复 --chenjianwen 一.前言: 当mysql库的大小达到几十个G或者上百G,迁移起来是一件非常费事的事情,业务中断,导出导入耗费大量的时 ...

  6. 使用pandas时遇到ValueError: numpy.dtype has the wrong size, try recompiling

    [问题]使用pandas时遇到ValueError: numpy.dtype has the wrong size, try recompiling [原因] 这是因为 Python 包的版本问题,例 ...

  7. uva-11111-栈

    注意输入和输出的结果 -9 -7 -2 2 -3 -2 -1 1 2 3 7 9 -9 -7 -2 2 -3 -1 -2 2 1 3 7 9-9 -7 -2 2 -3 -1 -2 3 2 1 7 9- ...

  8. Spring NamedParameterJdbcTemplate 详解

    转自: https://zmx.iteye.com/blog/373736 NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性 ...

  9. ETL 脚本任务

    Public Sub Main()        '        ' Add your code here        '        Dim sbWA As New StringBuilder ...

  10. 菜单与内容下拉jQuery

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...