首页 > 编程语言 >socket网络编程——套接字地址结构

socket网络编程——套接字地址结构

时间:2024-06-03 19:31:26浏览次数:24  
标签:socket family 编程 struct 地址 IPV4 接字 sa addr

一、通用 socket 地址结构

  socket 网络编程接口中表示 socket 地址的是结构体 sockaddr,其定义如下:

1. #include <bits/socket.h>
2.
3. struct sockaddr
4. {
5. sa_family_t sa_family;
6. char sa_data[14];
7. };
  sa_family 成员是地址族类型(sa_family_t)的变量。

  地址族类型通常与协议族类型对应。常见的协议族和对应的地址族如下图所示:

  

二、专用 socket 地址结构

  TCP/IP 协议族有 sockaddr_in 和 sockaddr_in6 两个专用 socket 地址结构体,它们分 别用于 IPV4 和 IPV6:
1. /*
2. sin_family: 地址族 AF_INET
3. sin_port: 端口号,需要用网络字节序表示
4. sin_addr: IPV4 地址结构:s_addr 以网络字节序表示 IPV4 地址
5. */
6.
7. struct in_addr
8. {
9. u_int32_t s_addr;
10. };
11.
12. struct sockaddr_in
13. {
14. sa_family_t sin_family;
15. u_int16_t sin_port;
16. struct in_addr sin_addr;
17. };
18.
19. struct in6_addr
20. {
21. unsigned char sa_addr[16]; // IPV6 地址,要用网络字节序表示
22. };
23.
24. struct sockaddr_in6
25. {
26. sa_family_t sin6_family; // 地址族:AF_INET6
27. u_inet16_t sin6_port; // 端口号:用网络字节序表示
28. u_int32_t sin6_flowinfo; // 流信息,应设置为 0
29. struct in6_addr sin6_addr; // IPV6 地址结构体
30. u_int32_t sin6_scope_id; // scope ID,尚处于试验阶段
31. };

三、IP 地址转换函数

  通常,人们习惯用点分十进制字符串表示 IPV4 地址,但编程中我们需要先把它们转化为整数方能使用。   下面函数可用于点分十进制字符串表示的 IPV4 地址和网络字节序整数表  示的 IPV4 地址之间的转换:
1. #include <arpa/inet.h>
2. in_addr_t inet_addr(const char *cp); //字符串表示的 IPV4 地址转化为网络字节序
3. char* inet_ntoa(struct in_addr in); // IPV4 地址的网络字节序转化为字符串表示

标签:socket,family,编程,struct,地址,IPV4,接字,sa,addr
From: https://blog.csdn.net/weixin_64685646/article/details/139422404

相关文章

  • UniTask入门指南:简化Unity中的异步编程
    UniTask入门指南:简化Unity中的异步编程介绍:UniTask是一个轻量级、高性能的异步编程库,专门针对Unity开发进行了优化。与Unity标准的Task系统相比,UniTask提供了更加简洁和高效的异步编程方式。在Unity项目中使用UniTask可以大大提高开发效率,简化异步操作的编码过程。UniTask......
  • ruoyi若依整合websocket
    原文链接:https://blog.csdn.net/qq_33342112/article/details/132096930注:本文档中的ruoyi框架为前后不分离版本,nginx配置与前后分离版有所不同。一、导pom,版本需与springboot版本一致<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • opencv c++编程基础
    1、图片的本质图像在OpenCV中的本质在OpenCV中,图像被表示为一个多维数组,其中每个元素对应于图像中的单个像素。图像的维度取决于其通道数和像素数。**通道数:**图像可以有多个通道,每个通道存储图像的不同信息。例如,彩色图像通常有3个通道(红色、绿色和蓝色),而灰度图像只......
  • C++ primer plus习题及解析第七章(函数C++编程模块)
    题目:7.1编写一个程序,不断要求用户输入两个数,直到其中的一个为0。对于每两个数,程序将使用一个函数来计算它们的调和平均数,并将结果返回给main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数,计算公式如下:调和平均数=2.0*x*y/(x+y)代码: intharmonic_averag......
  • Socket编程模型
    Socket,套接字就是两台主机之间逻辑连接的端点,其属于TCP/IP协议中的传输层协议,主要解决数据如何在网络中传输。而HTTP是应用层协议,主要解决如何包装数据(数据的格式化)。Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包......
  • C# 模拟http请求出现 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作[windo
    系统里面用到C#模拟Http请求,上线到服务器后,发现日志中大量出现“由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作”或“通常每个套接字地址(协议/网络地址/端口)只允许使用一次”运行netstat-ano发现有大量的Tcp链接,怀疑可能是服务器各种请求太多了导致的服务器是w......
  • 新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算
    传统程序员4大本领:泛型,枚举,反射,注解新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算lambda表达式//1.不需要参数,返回值为5()->5//2.接收一个参数(数字类型),返回其2倍的值x->2*x//3.接受2个参数(数字),并返回他们的差值(x,y)->x......
  • sv添加工作负荷(添加其他编程语言)
    参考——https://learn.microsoft.com/zh-cn/visualstudio/extensibility/vsix/get-started/get-tools?view=vs-2022版本:VisualStudio2022 打开VS(两种方式)A直接点击安装多个工具和功能 B点击“继续但无需代码(W)”,点击工具——》获取工具和功能 添加相关依赖——......
  • 网络编程基础
    1.概述邮件:计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:无线电台…传播交流信息,数据交换,通信。想......
  • 【Linux系统编程】冯诺依曼体系、操作系统、进程的认识
    目录一、认识冯诺依曼体系二、认识操作系统三、认识进程一、认识冯诺依曼体系我们日常使用的计算机,笔记本和我们不常见的计算机如服务器,它们都遵循冯诺依曼体系。下图是冯诺依曼体系结构的图解:我们可以看到冯诺依曼体系结构由以下硬件组成:输入设备、输出设备、存储器......