网络通信之大小端、字节序转换函数

  • Post author:
  • Post category:其他


在上篇文章中我们提到了UDP,TCP有关函数,并知道了一个重要的结构体struct sockaddr。想要实现通信首先要知道通信端的地址,所以首先了解一下IPv4套接字地址结构体。

//IPv4 套接字地址结构体,用来存放地址信息
struct sockaddr_in    //此结构体大小是16字节
{
   
    sa_family_t sin_family;  //2 字节 协议族(AF_INET、AF_INET6、PF_PACKET)
    in_port_t sin_port;      //2 字节 端口
    struct in_addr sin_addr; //4 字节 地址
    char sin_zero[8]         //8 字节  必须为0
};
struct in_addr
{
   
    in_addr_t s_addr;     //4 字节
};

注意 : 为了使不同格式地址能被传入套接字函数,地址须要强制转换成通用套接字地址结构。

//此结构体大小是16字节,函数参数的类型是此结构体,但其没有表示地址信息的成员变量,
//所以用IPv4结构体定义,强转成这个就可以了。(关键:大小一样)
struct sockaddr  
{
   
    sa_family_t sa_family;    // 2 字节
    char sa_data[14];         //14 字节
};  //通用套接字地址结构体,一般用来强转IPv4结构体

所以现在就是怎样给IPv4结构体赋值的问题了。

例子 :

//定义服务器IPv4地址结构(假设服务器的IP10.0.110.110  port=8080)
struct sockaddr_in server_addr;    //定义变量
//memset(&server_addr,0,sizeof(server_addr));   //清空1
bzero(&server_addr,sizeof(server_addr));     //清空2
//给成员变量赋值
server_addr.sin_family = AF_INET;		//ipv4协议
server_ad



版权声明:本文为xjpyinxll原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。