struct sockaddr {

unsigned short sa_family; char sa_data[14]; };

此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。

但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构

sockaddr_in(在netinet/in.h中定义):

struct sockaddr_in {

short int sin_family; unsigned short int sin_port;

struct in_addr sin_addr;

unsigned char sin_zero[8]; };

struct in_addr {

unsigned long s_addr;

};

typedef struct in_addr {

union

{

struct{

unsigned char s_b1,

s_b2,

s_b3,

s_b4;

}

S_un_b;

struct

{

unsigned short s_w1,

s_w2;

}

S_un_w;

unsigned

long S_addr;

}

S_un;

} IN_ADDR;

sin_family指代协议族,在socket编程中只能是AF_INET

sin_port存储端口号(使用网络字节顺序)

sin_addr存储IP地址,使用in_addr这个数据结构

sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。

s_addr按照网络字节顺序存储IP地址

sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向

sockadd的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,

在最后用进行类型转换就可以了bzero((char*)&mysock,sizeof(mysock));//初始化

mysock结构体名

mysock.sa_family=AF_INET;

mysock.sin_addr.s_addr=inet_addr("192.168.0.1");

……

等到要做转换的时候用:

(struct sockaddr*)mysock

想来你是要进行网络编程,使用socket, listen, bind等函数。

你只要记住,填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。

IP 地址和如何处理它们现在我们很幸运,因为我们有很多的函数来方便地操作 IP

地址。没有 必要用手工计算它们,也没有必要用"<

首先,假设你已经有了一个sockaddr_in结构体ina,你有一个IP地

址"132.241.5.10"要储存在其中,你就要用到函数inet_addr(),将IP地址从

点数格式转换成无符号长整型。使用方法如下:

ina.sin_addr.s_addr =

inet_addr("132.241.5.10");注意,inet_addr()返回的地址已经是网络字节格式,所以你无需再调用函数htonl()。

我们现在发现上面的代码片断不是十分完整的,因为它没有错误检查。

显而易见,当inet_addr()发生错误时返回-1。记住这些二进制数字?(无符号数)-1仅仅和IP地址255.255.255.255相符合!这可是广播地址!大错特

错!记住要先进行错误检查。

好了,现在你可以将IP地址转换成长整型了。有没有其相反的方法呢?

它可以将一个in_addr结构体输出成点数格式?这样的话,你就要用到函数

inet_ntoa()("ntoa"的含义是"network to ascii"),就像这样:

printf("%s",inet_ntoa(ina.sin_addr));

将输出IP地址。需要注意的是inet_ntoa()将结构体in-addr作为一个参数,不是长整形。同样需要注意的是它返回的是一个指向一个字符的

指针。它是一个由inet_ntoa()控制的静态的固定的指针,所以每次调用

inet_ntoa(),它就将覆盖上次调用时所得的IP地址。

linux sockaddr结构体,linux网络编程笔记 sockaddr_in结构体[转]相关推荐

  1. linux和网络编程笔记

    第一部分.章节目录 3.4.1.程序的开始和结束 3.4.2.进程环境 3.4.3.进程的正式引入 3.4.4.fork创建子进程 3.4.5.父子进程对文件的操作 3.4.6.进程的诞生和消亡 3. ...

  2. linux下C语言socket网络编程简例

    转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...

  3. Linux多线程、多进程、网络编程常见问题

    Linux多进程.多线程.网络编程常见问题 入门 1.GCC的工作流程? 工作流程: 预处理.编译.汇编.链接 具体流程如下: 2.gcc常用的参数选项 3.Makefile介绍 3.1.Makefi ...

  4. linux常见命令以及shell入门编程(笔记总结记录)

    linux常见命令以及shell入门编程(笔记总结记录) 文章目录 linux常见命令以及shell入门编程(笔记总结记录) 一.linux常见命令 1.不常用 2.常用 3.数据查找处理相关 1.g ...

  5. TCP/IP 网络编程笔记 第三章 地址族与数据序列

    文章目录 3.1 分配给套接字的 IP 地址与端口号 3.1.1 网络地址(Internet Address) 3.1.2 网络地址分类与主机地址边界 3.1.3 用于区分套接字的端口号 3.2 地址 ...

  6. Java网络编程笔记5

    在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...

  7. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  8. 进程fork和exec ---Unix网络编程笔记

    进程fork和exec ---Unix网络编程笔记 fork 一次调用,两次返回 fork的两个典型用法 最简单的并发服务器---fork子进程 exec -Unix网络编程笔记) fork #inc ...

  9. linux网络编程之地址结构sockaddr和sockaddr_in的区别

    1.介绍sockaddr 结构体struct sockaddr在/usr/include/linux/socket.h中定义 struct sockaddr {unsigned short sa_fa ...

最新文章

  1. 11.05 scrum report
  2. mysql router手册_mysql router
  3. 在.NET 2.0正式版中开发无刷新页面
  4. strip 命令的使用方法
  5. priority_queue+贪心:运输(题解)
  6. 细说WCF中的会话模式
  7. 将python中的小数直接进位的函数_python保留小数位的三种实现方法
  8. Throwable、Error、Exception、RuntimeException 区别
  9. paip.网站接入QQ登录总结
  10. php bin2hex park,PHP bin2hex()函数与示例
  11. IARPA启动“奥丁”项目,发展生物特征识别技术
  12. FastAPI 构建 API 服务,究竟有多快?
  13. Pikachu漏洞练习平台----验证码绕过(on server) 的深层次理解
  14. 小红书X千瓜联合发布|小红书2021年4月创作者红人榜
  15. 说说filter这个css属性(网站置灰实现)
  16. 前端代码调试:Webstorm调试js
  17. P1386 座位安排
  18. (七)Spring Security (spring-cloud-starter-oauth2)应用详解------认证授权服务------授权码模式和密码模式
  19. Libevent 学习一:Libevent 源码编译
  20. 520浪漫情人节可爱少女风格PPT模板

热门文章

  1. 【码绘】p5.js画Q版自画像
  2. python倒序遍历字符串
  3. 创作者经济中的声音内容
  4. oracle 分区概念,Oracle 分区的概念
  5. 台式电脑时间不准,需要手动调整
  6. (一)第一个Python程序
  7. Python中下划线 _ 的最全用法详解
  8. IllegalArgumentException: myid file is missing
  9. 苹果屏幕自动变暗_iOS版小程序、睡眠功能、苹果芯片:WWDC2020这些看点值得关注...
  10. CAD系统变量之GRIPS