Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >socket 编程--sockaddr与sockaddr_in区别与联系(转)

socket 编程--sockaddr与sockaddr_in区别与联系(转)

作者头像
jianghaibobo
发布于 2019-09-11 08:35:40
发布于 2019-09-11 08:35:40
2.1K0
举报

在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下: typedef unsigned short sa_family_t; struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ 在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具体如下: /* Structure describing an Internet socket address. */ struct sockaddr_in { __SOCKADDR_COMMON (sin_); in_port_t sin_port; /* Port number. */ struct in_addr sin_addr; /* Internet address. */ /* Pad to size of `struct sockaddr'. */ unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; /* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */ }; struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。 下面是struct sockaddr_in中用到两个数据类型,具体定义如下: /* Type to represent a port. */ typedef uint16_t in_port_t; struct in_addr其实就是32位IP地址 struct in_addr { unsigned long s_addr; }; BSD网络软件中包含了两个函数,用来在二进制地址格式和点分十进制字符串格式之间相互转换,但是这两个函数仅仅支持IPv4。 in_addr_t inet_addr(const char *cp); char *inet_ntoa(struct in_addr in); 功能相似的两个函数同时支持IPv4和IPv6 const char *inet_ntop(int domain, const void *addr, char *str, socklen_t size); int inet_pton(int domain, const char *str, void *addr); 通常的用法是: int sockfd; struct sockaddr_in my_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; /* 主机字节序 */ my_addr.sin_port = htons(MYPORT); /* short, 网络字节序 */ my_addr.sin_addr.s_addr = inet_addr("192.168.0.1"); bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */ //memset(&my_addr.sin_zero, 0, 8); bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));

转自:http://blog.csdn.net/samulelin/article/details/4431351

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
网络编程(一).TCP(2)
从 sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)] 中可以看出
franket
2021/09/15
3950
【Linux】: Socket 编程
但是人是怎么看到聊天信息的呢?怎么执行下载任务呢?怎么浏览网页信息呢?通过启动的 qq,迅雷,浏览器。 而启动的 qq,迅雷,浏览器都是进程。换句话说,进程是人在系统中的代表,只要把数据给进程,人就相当于就拿到了数据。
IsLand1314
2025/01/09
3990
【Linux】: Socket 编程
【网络编程系列】二:socket通信原理及实践
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下: 1、网络中进程之间如何通信? 2、Socket是什么? 3、socket的基本操作 3.1、socket()函数 3.2、bind()函数 3.3、l
老白
2018/03/19
1.8K0
【网络编程系列】二:socket通信原理及实践
初识网络 · udp的基本使用
在本文的这个系列,会涉及到不同协议的基本使用到背后的原理机制,那么从一开始我们先实操,比如我们先尝试编写一款具有回显功能的Udp服务器,再尝试对它加一点业务,最后,我们甚至可以使用多线程部分进行服务器的一个升级。
_lazy
2025/04/08
860
初识网络 · udp的基本使用
day01-从一个基础的socket服务说起
在linux中,一切都是文件,所有文件都有一个int类型的编号,称为文件描述符。服务端和客户端通信本质是在各自机器上创建一个文件,称为socket(套接字),然后对该socket文件进行读写。
会玩code
2022/04/24
1.2K2
day01-从一个基础的socket服务说起
TCP/IP网络编程-前三章学习笔记
前两年, 就买了《TCP/IP网络编程》这本书, 由于自身基础薄弱, 只是走马观花翻阅了几张。
用户2825413
2019/07/16
7840
TCP/IP网络编程-前三章学习笔记
Socket编程实践(2) Socket API 与 简单例程
在本篇文章中,先介绍一下Socket编程的一些API,然后利用这些API实现一个客户端-服务器模型的一个简单通信例程。该例子中,服务器接收到客户端的信息后,将信息重新发送给客户端。 socket()函数 socket()函数用于创建一个套接字。这就好像购买了一个电话。不过该电话还没有分配号码。 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol
Tencent JCoder
2018/07/02
8700
linux网络编程之socket(一):socket概述和字节序、地址转换函数
s1mba
2017/12/28
2.3K0
linux网络编程之socket(一):socket概述和字节序、地址转换函数
进程间通讯(七).socket(2)
从 sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)] 中可以看出
franket
2021/09/15
6480
UNIX网络编程卷1(第三版)套接字编程简介
  通常也被成为“网际套接字地址结构”,以sockaddr_in命名,定义在<netinet/in.h>头文件中。 
心跳包
2020/08/31
8390
Linux系统下socket编程socket接口介绍(二)
在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。今天我们继续来介绍网络编程里面的其它接口函数,为实战打下 基础;网络编程专题文章拖的有点久,这两天全部把它写完,不能再拖了。
用户6280468
2022/03/18
4K0
Linux网络编程API(一)
htonl即”host to network long”, 即长整型(32bit)的主机字节序转换未网络字节序数据。
doper
2022/09/26
1.4K0
Linux网络编程API(一)
套接口编程简介
每个协议族都定义了自己的套接口地址结构,名字均以sockaddr_开头,对应协议族的标志结束。大部分套接口函数需要指向套接口地址结构的指针作为参数。
jackieluo
2018/09/03
1.2K0
套接口编程简介
python recvfrom函数详解_UDP sendto和recvfrom使用详解「建议收藏」
在网络编程中,UDP运用非常广泛。很多网络协议是基于UDP来实现的,如SNMP等。大家常常用到的局域网文件传输软件飞鸽传书也是基于UDP实现的。
全栈程序员站长
2022/09/15
2.3K0
C语言实现Socket简单通信
https://www.cnblogs.com/Dukefish/p/9197830.html
C语言中文社区
2022/05/30
6750
网络编程 - Linux Socket编程
  socket(套接字)是网络编程编程的一种技巧。通过socket不仅可以实现跨进程通信,还可以实现跨主机的网络通信。使用这种技术,就可以实现全国各地的通讯。例如:深圳的一台电脑接收来自北京一台电脑发来的信息。   本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。
开源519
2023/03/09
10K0
网络编程 - Linux Socket编程
UNPv1第三章:套接字编程简介
1).IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在
提莫队长
2019/02/21
1.1K0
【Linux网络】Linux网络编程套接字,UDP与TCP
前言:在当今这个信息技术日新月异的时代,网络编程已成为连接世界、构建各类互联网应用不可或缺的一部分。而Linux,作为开源操作系统的典范,其强大的网络功能和灵活性,为开发者们提供了一个广阔而深入的实践平台。在众多网络编程技术中,套接字(Socket)编程无疑是核心与基石,它不仅支撑着Web服务、即时通讯、在线游戏等日常应用,还是实现分布式系统、云计算服务的关键技术之一。
Eternity._
2024/11/18
3980
【Linux网络】Linux网络编程套接字,UDP与TCP
SOCKET网络编程 (通俗易懂入门篇)
struct sockaddr :很多网络编程函数的出现早于IPV4协议,为了向前兼容,现在sockaddr都退化成(void *)结构了。 传递一个地址给函数,然后由函数内部再强制类型转换为所需的地址类型。
看、未来
2020/08/25
1.1K0
SOCKET网络编程 (通俗易懂入门篇)
网络套接字、网络字节序、sockaddr结构
Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。
mindtechnist
2025/02/12
1240
网络套接字、网络字节序、sockaddr结构
相关推荐
网络编程(一).TCP(2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档