码迷,mamicode.com
首页 > 其他好文 > 详细

Socket编程相关函数

时间:2015-06-24 20:40:54      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

  

  1. Socket地址说明及转换函数

  1.1 3种常见结构类型

   在套接字编程中,有三种常见的结构类型,他们用来存放socket地址信息。这三种结构分别是struct in_addr、struct sockaddr、struct sockaddr_in。

   1)struct in_addr专门用来存储IP地址,对于IPv4来说,IP地址为32位无符号整数。其定义如下:

struct in_addr {
    unsigned long s_addr;
}

 

   2)struct sockaddr结构用来保存套接字地址信息,定义如下:

struct sockaddr {
    unsigned short sa_family;    /* 地址族, AF_xxx */
    char sa_data[14];            /* 14字节的协议地址 */
}

  struct sockaddr结构中sa_family成员说明的是地址族类型,一般为AF_INET;而sa_data则包含远程主机的IP地址和端口等信息。

  struct sockaddr结构类型使用在socket的相关系统调用中,但这个结构sa_data字段可以包含较多信息,不利于方便编程和对其进行赋值,因此建立了struct sockaddr_in结构,该结构与struct sockaddr结构大小相等,能更好处理struct sockaddr结构中的数据。对struct sockaddr_in结构变量进行赋值完成后,在进行socket相关系统调用时,再将struct sockaddr_in结构变量强制转换为struct sockaddr结构类型。

  3)struct sockaddr_in结构定义如下:

struct sockaddr_in {                     /* in表示Internet */
   short int            sin_family;      /* Internet地址族 */
   unsigned short int   sin_port;        /* 端口号 */
   struct in_addr       sin_addr;        /* Internet地址 */
   unsigned char        sin_zero[8];     /* 填充0(保持与struct sockaddr 一样大小) */
};

 

  在实际编程中,对套接字地址结构使用方法和流程如下:

  A. 首先,定义一个sockaddr_in结构变量,并将它初始化为0,代码如下:

struct sockaddr_in myad;
memset(&myad, 0, sizeof(myad));

  B. 然后,给这个结构变量赋值,代码如下:

myad.sin_family = AF_INET;
myad.sin_port = htons(8080);
myad.sin_addr.s_addr = htonl(INADDR_ANY);

 

  C. 在进行函数调用时,将这个结构强制转换为struct sockaddr类型,代码如下:

bind(serverFd, (struct sockaddr *) &myad, sizeof(myad));

 

  1.2 整形字节序转换函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

Socket编程相关函数

标签:

原文地址:http://www.cnblogs.com/xiehongfeng100/p/4597803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!