一、初识Socket套接字结构体


1、通用套接字结构体类型

   struct sockaddr{sa_family_t sa_family; //协议簇char sa_data[14]; //协议簇数据}

通用套接字结构体可以在不同的协议簇之间进行强制转化,Socket网络编程中几乎所有套接字API函数的形参都是通用套接字结构体struct sockaddr。

存在问题:

  • 通用套接字结构体对编程的角度来说,设置很不方便,我们以以太网协议来说,当要设置端口号、IP地址等,那么我需要将端口号与IP地址进行数据组合绑定,然后赋值给该结构,是不能独立赋值。

  • 为解决上述问题,以太网协议中经常用到的是下述结构体,这样就可以给人以直观的方式去填充套接字结构体。

2、以太网套接字结构体

struct sockaddr_in{u8 sin_len;u8 sin_family;u16 sin_port;struct in_addr sin_addr;char sin_zero[8]; }
  • 结构体成员列表
结构体成员 参数含义 备注
u8 sin_len 结构体sockaddr_in的长度 一般大小为固定16字节
u8 sin_family 协议族类型 见下表
u16 sin_port 16位端口号 XXX
struct in_addr sin_addr 32位IP地址 INADDR_ANY //表示可以与任何主机通信
char sin_zero[8] //未使用 填充位,一般都设置为0

  • 协议簇列表

协议簇类型(sin_family) 参数含义
AF_INET 以太网/IPv4协议
AF_INET6 以太网/IPv6协议
AF_LOCAL Unix域协议/只在本机内通信的套接字
AF_ROUTE 路由套接口
AF_KEY 密钥套接口

Note : 我们主要使用的是以太网,所以sin_family成员一般都为AF_INET ,有时候我们看到协议簇类型是PF_* 而不是 AF*,这是因为glibc的实现机制是posix,其实都是同一个东西。


存在问题:

  • Socket网络编程中几乎所有套接字API函数的形参都是通用套接字结构体struct sockaddr,而我们初始化传递的参数是以太网套接字结构体struct sockaddr类型,这样是否就存在类型不一致的问题?
Exzampp:// API函数: fun(struct sockaddr)//  用户实际调用: int main(){struct sockaddr_in;fun(sockaddr_in);    //是否存在问题?}

问题解答:

  • 上述操作完全可以,因为这两个结构体在内存上的大小完全一致都是16个字节,所以隐式的转换不存在其它问题。
  • struct sockaddr = struct sockaddr_in 。 (不存在问题)

  *图示:两种结构类型的内存存储*

转载于:https://www.cnblogs.com/retry/p/9308802.html

三、初识Socket套接字结构体相关推荐

  1. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in {uint8_t sinlen;(4个字节)sa_family_t sin_family;(4个字节)in_port_t sin_port ...

  2. socket(套接字)详解一种通讯机制

    socket给提供给使用进程TCP/UDP等网络协议进行网络通讯手段. linux中网络编程通过socket接口实现: socket既是一种特殊的IO,提供对应的文件描述符.socket都有一个相关的 ...

  3. socket套接字TCP API

    socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点,或称之为句柄.IP地址+端口号就可以唯一确定一个sock ...

  4. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210726002244.doc-原创力文档...

    一.设计目的 为了提高同学的自主动手能力,把理论知识运用于实 践中,从实践中更好的领悟所学的知识. 二.题目要求及需求分析 1.网络I/O程序设计:用Socket套接字实现DAYTIME 协 议的服务 ...

  5. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210414073352.docx-原创力文档...

    用Socket套接字实现 DAY TIME 协议的服务器和客户端程序 一.设计目的 为了提高同学的自主动手能力,把理论知识运用于实 践中,从实践中更好的领悟所学的知识. 二.题目要求及需求分析 网络I ...

  6. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc...

    用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc 一. 设计目的 为了提高同学的自主动手能力,把理论知识运用于实践中,从实践中更好的领悟所学的知识 . 二. 题目要求及需求分析 ...

  7. daytime协议的服务器和客户端程序,用socket套接字实现daytime协议服务器和客户端程序.doc...

    文档介绍: 用socket套接字实现daytime协议服务器和客户端程序.doc一.设计目的为了提高同学的自主动手能力,把理论知识运用于实践中,从实践中更好的领悟所学的知识.二.题目要求及需求分析1. ...

  8. daytime协议的服务器和客户端程序,用socket套接字实现daytime协议的服务器和客户端程序精编版.doc...

    用socket套接字实现daytime协议的服务器和客户端程序精编版.doc 还剩 11页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: ------- ...

  9. Socket套接字通信 TCP UDP详解(网络通信)

    文章目录 一 什么是套接字Socket 1.Socket简介 2.Socket的域(domain) 3.Socket主要类型(type) 4.Socket基本工作流程 二 创建套接字Socket 1. ...

最新文章

  1. Windows Phone 7 WebBrowser 中文乱码问题
  2. 微信突然更新,新增了这些功能...
  3. 石川es6课程---6、解构赋值
  4. linux grub内核选择,UBUNTU GRUB没有内核选项,怎么回事啊?
  5. Wannafly挑战赛26 A B
  6. 软件蓝图设计_智能企业的设计蓝图
  7. 常用的 Cron 时间表达式 定时器 正则表达式
  8. 中国航空零部件制造行业业十四五投资发展规划及发展前景预测报告2022-2028年版
  9. plc c语言模拟仿真软件下载,s7-plcsim仿真编程-s7-plcsim最新版下载V5.4-西西软件下载...
  10. 小技巧给网页减肥 让网站访问提速
  11. 洛谷 P4200 千山鸟飞绝平衡树
  12. 开关控制灯实验C语言编程,指示灯开关控制器实验.doc
  13. 表的创建(create),修改(alter)和删除(drop)
  14. 使用xshell登陆腾讯云主机
  15. 基于I2C协议读取AD值(arm单片机,转换标志位RDY-可中断使用)
  16. 比較好的JAVA網站
  17. Linux网络新技术基石:eBPF and XDP
  18. php微信公众号测试账号密码,微信公众号测试账号配置失败竟然是因为一个字符...
  19. 干掉保险丝和继电器,自动驾驶才能更安全
  20. 在软件工程领域,搞科研的这十年!

热门文章

  1. python真的那么强大嘛-python强大吗
  2. python小项目推荐项目-推荐 10 个有趣的 Python 项目
  3. python最高版本-Python学习路线图(2020年最新版)
  4. python爬虫案例-Python爬取租房数据实例,据说可以入门爬虫的小案例!
  5. python工程师月薪-在三线城市,Python工程师也能拿到月薪20K?
  6. python小程序-python学习—几个简单小程序
  7. python教学在线观看-python在线学习
  8. python从入门到精通怎么样-Python 从入门到精通:一个月就够了
  9. python在读写文件之前需要创建文件对象-python基础教程:文件读写
  10. python学起来难不难-零基础学Python爬虫难不难?要怎么学?