SOCKADDR_IN,sockaddr 类型重定义,C语言 sockaddr和sockaddr_in案例详解

SOCKADDR_IN,sockaddr 类型重定义,C语言 sockaddr和sockaddr_in案例详解

本文主要介绍C语言sockaddr和sockaddr_in案例的详细讲解。本文通过一个简单的案例,说明了对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

使用两种结构struct sockaddr和struct sockaddr_in来处理网络通信的地址。

一、sockaddr

Sockaddr是在头文件# includesys/socket.h中定义的,sockaddr的缺陷是sa_data混合了目的地址和端口信息,如下:

结构sockaddr {

sa _ family _ t sin _ family//地址族

char sa _ data[14];//14字节,包含套接字中的目的地址和端口信息

};

二、sockaddr_in

SOCKDR _ IN是在头文件# INCLUDENET/IN.h或者# include ARP/inet . h中定义的,这个结构解决了sockaddr的缺陷,将port和addr分别存储在两个变量中,如下:

Sin_port和sin_addr必须都是网络字节序(NBO),一般可见的数字是主机字节序(HBO)。

三、总结

两者长度都是16字节,也就是占用相同的内存大小,所以可以相互转换。它们是并行结构,sockaddr_in结构的指针也可以指向sockaddr。

Sockaddr常用作bind、connect、recvfrom、sendto等函数的参数。并指示地址信息。这是一个通用套接字地址。

Socdr _ in是socket在互联网环境下的地址形式。所以在网络编程中,我们会操作sockaddr_in结构,使用sockaddr_in建立所需信息,最后使用类型转换。一般先赋值sockaddr_in变量,然后强制类型转换后传入以sockaddr为参数的函数:sockaddr_in用于socket定义和赋值;Sockaddr用于函数参数。

例子如下:

#包含stdio.h

#包含stdlib.h

#包含sys/socket.h

#包含netinet/in.h

int main(int argc,char **argv)

{

int sockfd

结构sockaddr _ in mysock

sockfd=socket(AF_INET,SOCK_STREAM,0);//获取fd

bzero(mysock,sizeof(my sock));//初始化结构

mysock.sin _ family=AF _ INET//设置地址族

my sock . sin _ port=htons(800);//设置端口

my sock . sin _ addr . s _ addr=inet _ addr(' 192 . 168 . 1 . 0 ');//设置地址

bind(sockfd,(struct sockaddr *)mysock,sizeof(struct sockaddr);/*绑定时转换*/

.

返回0;

}

题外话,两个函数htons()和inet_addr()。

Htons()用于将端口号从主机字节顺序转换为网络字节顺序的整数值。(主机到网络)

inet_addr()的作用是将一个IP字符串转换为sockaddr_in.sin_addr.s_addr的网络字节顺序的整数值。

inet_ntoa()的作用是输出一个sin_addr结构作为IP字符串(网络转ascii)。例如:

printf('%s ',inet _ ntoa(my sock . sin _ addr));

HTOL()的功能与htons()相同,但它适用于32位(长型),而htons()适用于两个字节和16位(短型)。

与htonl()和htons()相对的两个函数是:ntohl()和ntohs()。

本文关于C语言sockaddr和sockaddr_in案例的详细讲解到此为止。有关C语言sockaddr和sockaddr_in的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: