iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux C中sockaddr和sockaddr_in的区别是什么
  • 626
分享到

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

2023-06-09 15:06:57 626人浏览 安东尼
摘要

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

这篇文章给大家分享的是有关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的区别是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

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

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Linux C中sockaddr和sockaddr_in的区别是什么
    这篇文章给大家分享的是有关Linux C中sockaddr和sockaddr_in的区别是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux C中sockaddr和sockaddr_in的区别struc...
    99+
    2023-06-09
  • C++和C中const的区别是什么
    本篇内容介绍了“C++和C中const的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const,这个词字面意思为:常数。这就表示...
    99+
    2023-06-21
  • C#中 new和override的区别是什么
    本篇文章为大家展示了C#中 new和override的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。override是指“覆盖”,是指子类覆盖了父类的方法。子类的对象无法再访问父类中的该方...
    99+
    2023-06-17
  • c++中ReleaseDC和DeleteDC的区别是什么
    在C++中,ReleaseDC和DeleteDC是两个函数,它们的区别如下:1. ReleaseDC函数:这个函数用于释放设备上下文...
    99+
    2023-09-27
    c++
  • Linux中UMA和NUMA的区别是什么
    UMA(Uniform Memory Access)和NUMA(Non-Uniform Memory Access)是描述计算机系统...
    99+
    2023-10-22
    Linux UMA NUMA
  • Linux中sleep和usleep的区别是什么
    在Linux中,`sleep`和`usleep`是两个常用的函数,用于延迟执行。 `sleep`函数用于将当前进程暂停指定的时间,单...
    99+
    2023-10-25
    Linux
  • C#中Task.Delay()和Thread.Sleep()的区别是什么
    这篇文章将为大家详细讲解有关C#中Task.Delay()和Thread.Sleep()的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、简介Thread.Sleep()是同步延...
    99+
    2023-06-15
  • C# 中StringBuilder和String的区别是什么
    今天就跟大家聊聊有关C# 中StringBuilder和String的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# StringBuilder和String区别Str...
    99+
    2023-06-17
  • C# 中override和overload的区别是什么
    今天就跟大家聊聊有关C# 中override和overload的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# override和overload特点重载(Overlo...
    99+
    2023-06-17
  • c#中EnableViewState和ViewStateMode的区别是什么
    在C#中,EnableViewState和ViewStateMode都是用于控制ViewState的属性。它们的区别如下: En...
    99+
    2023-10-23
    c#
  • c++中class和struct的区别是什么
    在C++中,class和struct都用于定义自定义的数据类型,但它们之间有几个区别。1. 默认的访问修饰符:在class中,默认的...
    99+
    2023-09-15
    c++
  • c++中break和continue的区别是什么
    在C++中,break和continue是两个控制流语句,用于在循环中控制程序的执行流程。 break语句用于终止当前循环(for...
    99+
    2024-03-01
    c++
  • C#中Write()和WriteLine()的区别是什么
    Write()和WriteLine()都是用于输出文本到控制台的方法,它们的区别在于: Write()方法在输出文本后不会自动换行...
    99+
    2024-03-01
    C#
  • linux中LANG和NLS_LANG的区别是什么
    今天就跟大家聊聊有关linux中LANG和NLS_LANG的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下:export LANG=zh_CN.GB2312 &nb...
    99+
    2023-06-13
  • linux中less和more的区别是什么
    本篇内容介绍了“linux中less和more的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、less可以按上下方向键来...
    99+
    2023-06-30
  • Linux中open和fopen的区别是什么
    这篇文章主要讲解了“Linux中open和fopen的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中open和fopen的区别是什么”吧!区别:1、open是UNIX系...
    99+
    2023-06-30
  • C++中vector和list区别是什么
    这篇文章主要讲解了“C++中vector和list区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中vector和list区别是什么”吧!一张表格让你理解vector和list...
    99+
    2023-06-26
  • c语言中s和c的区别是什么
    c语言中s和c的区别在于输出数据类型:s用于输出字符串,而c用于输出单个字符。此外,s支持宽度指定和精度指定,而c不支持;s支持空格填充,而c不支持。 C语言中s和c的区别 s和c是C...
    99+
    2024-05-12
    c语言
  • java和c++的区别是什么
    Java和C++是两种常见的编程语言,在以下几个方面有所不同:1. 语法结构:Java是一种面向对象的编程语言,其语法结构较为简洁和...
    99+
    2023-08-30
    java
  • ubuntu和linux的区别是什么
    ubuntu和linux的区别是:1.概念不同、2.基础不同等。概念不同,linux是一套免费使用和自由传播的类Unix操作系统,而ubuntu是一个以桌面应用为主的linux操作系统。.基础不同,linux是一个基于POSIX和Unix的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作