返回顶部
首页 > 资讯 > 操作系统 >Linux C中sockaddr和sockaddr_in的区别
  • 647
分享到

Linux C中sockaddr和sockaddr_in的区别

区别Linuxsockaddr 2022-06-04 21:06:10 647人浏览 独家记忆
摘要

Linux C中sockaddr和sockaddr_in的区别 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。 在各种系统调用或者函数中,只要和网

Linux C中sockaddr和sockaddr_in的区别

struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。

在各种系统调用或者函数中,只要和网络地址打交道,就得用到这两个结构体。

网络中的地址包含3个方面的属性:

1 地址类型: ipv4还是ipv6
2 ip地址
3 端口

相应的,头文件有如下定义:


include <netinet/in.h> 
 
struct sockaddr { 
  unsigned short  sa_family;  // 2 bytes address family, AF_xxx 
  char       sa_data[14];   // 14 bytes of protocol address 
}; 
 
// IPv4 AF_INET Sockets: 
 
struct sockaddr_in { 
  short      sin_family;    // 2 bytes e.g. AF_INET, AF_INET6 
  unsigned short  sin_port;  // 2 bytes e.g. htons(3490) 
  struct in_addr  sin_addr;   // 4 bytes see struct in_addr, below 
  char       sin_zero[8];   // 8 bytes zero this if you want to 
}; 
 
struct in_addr { 
  unsigned long s_addr;     // 4 bytes load with inet_pton() 
}; 

注释中标明了属性的含义及其字节大小,这两个结构体一样大,都是16个字节,而且都有family属性,不同的是:

sockaddr用其余14个字节来表示sa_data,而sockaddr_in把14个字节拆分成sin_port, sin_addr和sin_zero分别表示端口、ip地址。sin_zero用来填充字节使sockaddr_in和sockaddr保持一样大小。

sockaddr和sockaddr_in包含的数据都是一样的,但他们在使用上有区别:

程序员不应操作sockaddr,sockaddr是给操作系统用的

程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。

一般的用法为:

程序员把类型、ip地址、端口填充sockaddr_in结构体,然后强制转换成sockaddr,作为参数传递给系统调用函数

网络编程中一段典型的代码为:


int sockfd; 
struct sockaddr_in servaddr; 
 
sockfd = Socket(AF_INET, SOCK_STREAM, 0); 
 
 
bzero(&servaddr, sizeof(servaddr)); 
servaddr.sin_family = AF_INET; 
servaddr.sin_port = htons(SERV_PORT); 
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); 
 
 
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); 
  



感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

--结束END--

本文标题: Linux C中sockaddr和sockaddr_in的区别

本文链接: https://lsjlt.com/news/18703.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux C中sockaddr和sockaddr_in的区别
    Linux C中sockaddr和sockaddr_in的区别 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。 在各种系统调用或者函数中,只要和网...
    99+
    2022-06-04
    区别 Linux sockaddr
  • Linux C中sockaddr和sockaddr_in的区别是什么
    这篇文章给大家分享的是有关Linux C中sockaddr和sockaddr_in的区别是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux C中sockaddr和sockaddr_in的区别struc...
    99+
    2023-06-09
  • C语言 sockaddr和sockaddr_in案例详解
    struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址。 一、sockaddr sockaddr在...
    99+
    2024-04-02
  • C语言sockaddr和sockaddr_in怎么使用
    在C语言中,`sockaddr`和`sockaddr_in`结构体用于表示套接字地址。`sockaddr`是一个通用的套接字地址结构体,而`sockaddr_in`是用于IPv4地址的套接字地址结构体。首先,我们需要包含头文件``来使用...
    99+
    2023-08-11
    C语言
  • c++中::和.的区别
    c++++ 中 :: 和 . 的区别 回答:C++ 中的 :: 和 . 是两个不同的运算符,用于访问类成员和全局成员。 详细解释: 1. ::(范围解析运算符) 用于访问全局成员,包括...
    99+
    2024-04-26
    c++
  • c++中+和++的区别
    在 c++ 中,"+" 运算符用于数值相加和字符串连接,而 "++" 运算符则用于变量递增。"++" 可以作为后缀或前缀运算符使用,后缀递增在返回结果后再递增,而前缀递增在递增后再返回结...
    99+
    2024-04-26
    c++
  • c++中::和:的区别
    双冒号 (::) 用于命名空间作用域解析和类静态成员访问,单冒号 (:) 用于基类初始化和隐式类型转换。 C++ 中 :: 和 : 的区别 在 C++ 编程语言中,双冒号 (::) 和...
    99+
    2024-04-26
    c++ 作用域 隐式类型转换
  • c++中=和==的区别
    c++ 中 = 和 == 的区别:"=" 是赋值运算符,将值赋给变量或引用;"==" 是相等操作符,比较两个值是否相等并返回布尔值。 C++ 中 = 和 == 的区别 C++ 中的 =...
    99+
    2024-04-26
    c++ 编译错误
  • c++中==和=的区别
    c++ 中,== 运算符用于比较表达式是否相等,返回布尔值(真或假);= 运算符用于赋值,将表达式的值分配给变量,返回被赋值的变量。 C++ 中 == 和 = 的区别 在 C++ 编程...
    99+
    2024-04-26
    c++
  • c++中|和||的区别
    c++ 中 |(按位或)和 ||(逻辑或)之间的区别在于:1. 运算:| 进行逐位比较,而 || 进行逻辑比较。2. 优先级:|| 优先级高于 |。3. 用途:| 用于位掩码和移位运算,...
    99+
    2024-04-28
    c++
  • c和c++中static的区别
    static 在 c 和 c++ 中的区别包括:作用域:c 中仅限于文件,c++ 可为文件或类作用域;链接:c 中仅链接到所在文件,c++ 中链接到整个程序;初始化:c 中默认为 0,c...
    99+
    2024-05-14
    c++ 作用域
  • const在c和c++中的区别
    在 c 和 c++ 中,const 关键字用于声明常量。在 c 中,const 只能修饰变量,不能修饰指针或数组;在 c++ 中,const 可以修饰变量、指针和数组。主要的差异在于:作...
    99+
    2024-04-28
    c++ 作用域
  • struct在c和c++中的区别
    c和c++中struct的区别包括:c中成员默认公开访问,c++中默认私有访问。c++可以在struct定义中初始化成员,c中不允许。c++支持成员函数,c不支持。c++不支持匿名str...
    99+
    2024-05-14
    c++
  • static在c和c++中的区别
    static关键字在c和c++中用于控制变量的生命周期和作用域。在c中,它延长局部变量和限制全局变量的作用域。在c++中,它还用于定义类成员变量和函数、命名空间中的变量和函数,以及函数内...
    99+
    2024-05-14
    c语言 c++ 作用域
  • c++中string和char的区别
    c++ 中 string 和 char 的区别:数据类型:string 是 stl 类,char 是基本数据类型。内存存储:string 使用动态内存分配,char 只分配一个字节。操作...
    99+
    2024-05-09
    c++
  • c++中a--和--a的区别
    c++ 中,a-- 和 --a 都是递减运算符,区别在于递减时间:a-- 先赋值后递减,返回递减前值;--a 先递减后赋值,返回递减后值。使用时,--a 用于递减后使用,而 a-- 则用...
    99+
    2024-05-10
    c++
  • c++中string和cstring的区别
    在 c++ 中,string 和 cstring 是存储字符串的不同数据类型。string 使用动态内存管理和 unicode 编码,提供更高级的字符串操作和安全性。cstring 使用...
    99+
    2024-05-10
    c++ 标准库
  • c++中的i++和++i区别
    c++ 中的 i++ 和 ++i 运算符用于增加变量 i 的值,主要区别在于运算符的位置:后缀增量运算符 (i++) 先操作 i 值,然后返回原始值;前缀增量运算符 (++i) 先增量 ...
    99+
    2024-05-12
    c++
  • c语言中/和%的区别
    c 语言中 '/' 和 '%' 运算符的不同:'/' 是除法运算符,用于计算商。'%' 是求模运算符,用于计算余数。除数必须为正整数,被除数可以为正负整数。 c语言中 / 和 % 的区...
    99+
    2024-04-27
    c语言
  • c语言中\和/的区别
    c 语言中,反斜杠 '\' 用于转义特殊字符,而正斜杠 '/' 用于表示除法运算符。此外,反斜杠还可用于注释、分隔文件路径和拼接字符常量。 C 语言中 \ 和 / 的区别 直接回答:C...
    99+
    2024-04-28
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作