WIN7+VS2013

sockaddr

//
// Structure used to store most addresses.
//
typedef struct sockaddr { #if (_WIN32_WINNT < 0x0600)
u_short sa_family;
#else
ADDRESS_FAMILY sa_family; // Address family.
#endif //(_WIN32_WINNT < 0x0600) CHAR sa_data[14]; // Up to 14 bytes of direct address.
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;

sockaddr_in

//
// IPv4 Socket address, Internet style
// typedef struct sockaddr_in { #if(_WIN32_WINNT < 0x0600)
short sin_family;
#else //(_WIN32_WINNT < 0x0600)
ADDRESS_FAMILY sin_family;
#endif //(_WIN32_WINNT < 0x0600) USHORT sin_port;
IN_ADDR sin_addr;
CHAR sin_zero[8];
} SOCKADDR_IN, *PSOCKADDR_IN;

二者的占用的内存大小是一致的,因此可以互相转化,从这个意义上说,他们并无区别。

sockaddr常用于bind、connect、recvfrom、sendto等函数的参数,指明地址信息。是一种通用的套接字地址。而sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作。使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。

题外话,两个函数 htons() 和 inet_addr()。

htons()作用是将端口号由主机字节序转换为网络字节序的整数值。(host to net)

inet_addr()作用是将一个IP字符串转化为一个网络字节序的整数值,用于sockaddr_in.sin_addr.s_addr。





inet_ntoa()作用是将一个sin_addr结构体输出成IP字符串(network to ascii)。





htonl()作用和htons()一样,不过它针对的是32位的,而htons()针对的是两个字节,16位的。

与htonl()和htons()作用相反的两个函数是:ntohl()和ntohs()。

sockaddr与sockaddr_in的关系的更多相关文章

  1. sockaddr与sockaddr_in结构体简介

    struct sockaddr { unsigned  short  sa_family;     /* address family, AF_xxx */char  sa_data[14];     ...

  2. sockaddr和sockaddr_in的区别(转载)

    原文链接:http://kenby.iteye.com/blog/1149001 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 在各种系统调 ...

  3. sockaddr与sockaddr_in

    struct sockaddr { unsigned short sa_family;     char sa_data[14]; }; 此数据结构用做bind.connect.recvfrom.se ...

  4. sockaddr和sockaddr_in的区别

    struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 在各种系统调用或者函数中,只要和网络地址打交道,就得用到这两个结构体. 网络中的地址包含3个方 ...

  5. 网络编程——sockaddr 与 sockaddr_in

    struct sockaddr 这个结构体是linux的网络编程接口中用来表示IP地址的标准结构体,bind.connect等函数中都需要这个结构体,这个结构体是兼容IPV4和IPV6的. 在实际编程 ...

  6. socket 编程--sockaddr与sockaddr_in区别与联系(转)

    在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t; ...

  7. sockaddr & sockaddr_in struct

    struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ ]; /* 14 bytes of protocol ...

  8. [转载]Linux编程 sockaddr_in 和sockaddr和in_addr详解

    sockaddr sockaddr 是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 sa_family是地址家族,一般都是"AF_xxx& ...

  9. socket编程 ------ sockaddr_in 和 sockaddr 的区别

    struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址. // 以下是 IPv4 的定义 struct sockaddr { unsigned s ...

随机推荐

  1. FacadePattern(外观模式)-----Java/.Net

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性

  2. Linux学习之路--shell学习

    shell基础知识 什么是Shell Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作 ...

  3. Win10该文件没有与之关联的应用来执行该操作...请在"默认应用设置"页面中创建关联

    问题发现:一直使用的一款软件--火柴,这两天忽然发现通过ctrl + 回车快捷键无法进入到文件所在的目录中(之前几天印象中还可以使用该功能).后来测试又发现无法打开网易云音乐中下载的音乐而进入到该音乐 ...

  4. 微信公众号 唤醒手机导航APP 一看就懂 复制即用

    公司自研发框架,基本上没啥看不懂的 基本都是直接复制用就好了!希望能帮助到需要的朋友! 新建俩个同级文件用来保存 jsapi_ticket 和 access_token的文件 命名:jsapi_tic ...

  5. ACM北大暑期课培训第八天

    今天学了有流量下界的网络最大流,最小费用最大流,计算几何. 有流量下界的网络最大流 如果流网络中每条边e对应两个数字B(e)和C(e), 分别表示该边上的流量至少要是B(e),最多 C(e),那么,在 ...

  6. axios全局引用

    在vue项目开发中,我们使用axios进行ajax请求,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from ...

  7. git branch stash

    一.branch(分支) 1.创建分支 git branch dev 2.切换分支 git branch dev 3.合并分支 git merge bug 4.查看分支 git branch 5.删除 ...

  8. Qt Installer Framework翻译(2)

    开始 Qt IFW作为Qt项目的一部分进行开发.该框架自身也使用Qt.然而,它能被用于安装所有类型的应用程序,包括(但不限于)使用Qt编译的. 支持的平台 已在下列平台中进行了测试: > Mic ...

  9. Java入门 - 语言基础 - 02.开发环境配置

    原文地址:http://www.work100.net/training/java-environment-setup.html 更多教程:光束云 - 免费课程 开发环境配置 序号 文内章节 视频 1 ...

  10. .net core 连接数据库(通过数据库生成Modell)

    创建数据库 (扫盲贴还劳烦大神们勿喷,谢谢) 打开数据库 输入如下代码 创建数据库 CREATE DATABASE [Blogging]; GO USE [Blogging]; GO CREATE T ...