我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux C中sockaddr和sockaddr_in的区别是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux C中sockaddr和sockaddr_in的区别是什么

这篇文章给大家分享的是有关Linux C中sockaddr和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));

感谢各位的阅读!关于“Linux C中sockaddr和sockaddr_in的区别是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux C中sockaddr和sockaddr_in的区别是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux C中sockaddr和sockaddr_in的区别是什么

这篇文章给大家分享的是有关Linux C中sockaddr和sockaddr_in的区别是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux C中sockaddr和sockaddr_in的区别struc
2023-06-09

Linux C中sockaddr和sockaddr_in的区别

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

C++和C中const的区别是什么

本篇内容介绍了“C++和C中const的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const,这个词字面意思为:常数。这就表示
2023-06-21

C# 中override和overload的区别是什么

今天就跟大家聊聊有关C# 中override和overload的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# override和overload特点重载(Overlo
2023-06-17

C#中 new和override的区别是什么

本篇文章为大家展示了C#中 new和override的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。override是指“覆盖”,是指子类覆盖了父类的方法。子类的对象无法再访问父类中的该方
2023-06-17

c++中class和struct的区别是什么

在C++中,class和struct都用于定义自定义的数据类型,但它们之间有几个区别。1. 默认的访问修饰符:在class中,默认的成员访问修饰符是private,而在struct中,默认的成员访问修饰符是public。2. 继承方式:在c
2023-09-15

c#中EnableViewState和ViewStateMode的区别是什么

在C#中,EnableViewState和ViewStateMode都是用于控制ViewState的属性。它们的区别如下:EnableViewState:EnableViewState是一个控件级别的属性,用于确定该控件是否启用ViewSt
2023-10-23

C#中Task.Delay()和Thread.Sleep()的区别是什么

这篇文章将为大家详细讲解有关C#中Task.Delay()和Thread.Sleep()的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、简介1.Thread.Sleep()是同
2023-06-15

C# 中StringBuilder和String的区别是什么

今天就跟大家聊聊有关C# 中StringBuilder和String的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# StringBuilder和String区别Str
2023-06-17

c++中ReleaseDC和DeleteDC的区别是什么

在C++中,ReleaseDC和DeleteDC是两个函数,它们的区别如下:1. ReleaseDC函数:这个函数用于释放设备上下文环境(DC),它接收两个参数:窗口句柄和设备上下文句柄。ReleaseDC函数用于告诉操作系统不再需要设备上
2023-09-27

C#中Write()和WriteLine()的区别是什么

Write()和WriteLine()都是用于输出文本到控制台的方法,它们的区别在于:Write()方法在输出文本后不会自动换行,而是在同一行继续输出后续文本。WriteLine()方法在输出文本后会自动换行,使下一次输出文本从新的一行开
C#中Write()和WriteLine()的区别是什么
2024-03-01

c语言中s和c的区别是什么

c语言中s和c的区别在于输出数据类型:s用于输出字符串,而c用于输出单个字符。此外,s支持宽度指定和精度指定,而c不支持;s支持空格填充,而c不支持。C语言中s和c的区别s和c是C语言中常用的格式说明符,用于分别输出字符串和字符。它们之间
c语言中s和c的区别是什么
2024-05-12

Linux中open和fopen的区别是什么

这篇文章主要讲解了“Linux中open和fopen的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中open和fopen的区别是什么”吧!区别:1、open是UNIX系
2023-06-30

linux中less和more的区别是什么

本篇内容介绍了“linux中less和more的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、less可以按上下方向键来
2023-06-30

Linux中UMA和NUMA的区别是什么

UMA(Uniform Memory Access)和NUMA(Non-Uniform Memory Access)是描述计算机系统中内存访问模式的术语。UMA是指在一个计算机系统中,所有的处理器(CPU)都可以等效地访问系统中的所有内存
2023-10-22

Linux中sleep和usleep的区别是什么

在Linux中,`sleep`和`usleep`是两个常用的函数,用于延迟执行。`sleep`函数用于将当前进程暂停指定的时间,单位是秒。例如,`sleep(5)`将会暂停当前进程5秒钟。`usleep`函数用于将当前进程暂停指定的时间
2023-10-25

java和c++的区别是什么

Java和C++是两种常见的编程语言,在以下几个方面有所不同:1. 语法结构:Java是一种面向对象的编程语言,其语法结构较为简洁和规范,采用类和对象的概念进行编程;而C++则是一种多范式的编程语言,支持面向对象、面向过程和泛型编程,语法相
2023-08-30

linux中LANG和NLS_LANG的区别是什么

今天就跟大家聊聊有关linux中LANG和NLS_LANG的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下:export LANG=zh_CN.GB2312 ex
2023-06-13

c 和java的区别是什么

Java和C都是指令式语言(Imperative Language),不同的是Java有面向对象(OO)成分在里面,而C是完全面向过程的,C的高级版本C++、C#支持面向对象。另外一个不同是,Java跨平台,既不同的操作系统都可以通过JVM来解释Java程序,
c 和java的区别是什么
2019-02-23

C++中vector和list区别是什么

这篇文章主要讲解了“C++中vector和list区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中vector和list区别是什么”吧!一张表格让你理解vector和list
2023-06-26

编程热搜

目录