Linux网络编程之socket相关结构体

Linux中的网络编程是通过 Socket (套接字)实现。
Socket有三种类型:
流式套接字(SOCK_STREAM)
流式套接字可以提供可靠的、面向连接的通讯流,它使用TCP协议。TCP保证了数据传输的正确性和顺序性。

数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP。

原始套接字(SOCK_RAM)
原始套接字允许使用IP协议,主要用于新的网络协议的测试等。


Socket 相关结构体:

  • struct sockaddr_un 是一种进行本地进程间 IPC 的方法.
    struct sockaddr_un
    {
    	sa_family_t sun_family;
    	char sun_path[UNIX_PATH_MAX];
    };
    sun_family: 一般是 PF_UNIX 或 AF_UNIX;
    sun_path: 路径名;
  • struct sockaddr 是一个通用的 socket 地址
    struct sockaddr
    {
    	u_short sa_family;
    	char sa_data[14];
    };
    sa_family: 地址族,一般为AF_INET,代表 Internet (TCP/IP) 地址族。
    sa_data: 包含该socket的IP地址和端口号。
  • struct sockaddr_in 是一个 Internet 网 socket 地址(一个 TCP 的 socket 地址)。
    struct sockaddr_in 
    {
    	short int sin_family;  
    	unsigned short int sin_port;
    	struct in_addr sin_addr;
    	unsigned char sin_zero[8];
    };
    
    sin_family: 地址族。一般来说是AF_INET和PF_INET
    sin_port: 端口号(使用网络字节顺序)。在linux 下,端口号的范围是 0~65535, 0~1024 范围的端口号已经被系统使用或保留。
    
    sin_addr: 存储IP地址,使用in_addr 这个数据结构。
    
     typedef uint32_t in_addr_t;
     struct in_addr {
            in_addr_t s_addr;
     };                                                                                                                                                 
    sin_zero: 为了将 sockaddr_in 结构与 sockaddr 结构对齐。
    注意:填值的时候使用 sockaddr_in ,而作为函数的参数传入的时候转换成 sockaddr 结构。







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux网络编程是指在Linux操作系统下使用C语言进行网络编程的过程。在Linux网络编程中,可以使用一些函数来进行字节序转换和处理Socket地址。 关于字节序转换,可以使用以下函数: - 主机字节序转网络字节序:htons、htonl函数(host to net 无符号short/int) - 网络字节序转主机字节序:ntohs、ntohl(net to host 无符号short/int) 关于Socket地址的处理,可以使用以下结构体和函数: - sockaddr_storage结构体:表示一个通用的Socket地址结构体,用于封装端口号和IP等信息。 - sockaddr_in和sockaddr_in6结构体:专用于TCP/IP协议族的Socket地址结构体。 - 在网络编程中,可以根据地址族来确定使用哪种结构体,并使用相应的函数进行处理。 在Linux网络编程中,可以使用一些开源项目如Redis、Muduo、TeamTalk等作为学习的参考,其中Muduo是一个比较经典的网络编程框架。 需要注意的是,网络编程函数的诞生早于IPv4协议时期,因此使用的是struct sockaddr结构体。为了向前兼容,现在sockaddr被退化为(void *)的作用,而具体使用的是sockaddr_in还是sockaddr_in6则取决于地址族,函数内部会根据需要进行强制类型转换。 总结起来,Linux网络编程是在Linux操作系统下使用C语言进行网络编程的过程,其中涉及到字节序转换和处理Socket地址的相关函数和结构体。可以通过学习开源项目和相关资料进一步深入了解和应用网络编程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值