网络编程学习2-套接字编程简介

主要记录套接字的基本结构及相关常用函数

1 套接字地址结构-IPv4

 1 struct in_addr{
 2       in_addr_t   s_addr;  // 32位的IPv4地址     
 3 }
 4 
 5 struct socketaddr_in{
 6       uint_8  sin_len;  // 长度
 7       sa_family   sin_family;  //协议族,IPv4为AF_INET
 8       in_port_t   sin_port;    // 端口号
 9       struct  in_addr   sin_addr;  //IPv4地址
10       char    sin_zero[8];    
11 }

对应于IPv4套接字地址,存在一个通用的套接字地址结构,IPv6对应的通用套接字地址结构与之类似

View Code
1 struct sockadd{
2     uint8_t   sa_len;  
3     sa_family  sa_family; //指示协议族
4     char     sa_data[14]; //特定协议地址
5 }

2 IPv6

View Code

IPv4和IPv6套接字结构具有固定的字节数,分别为16字节和28字节,而Unix、数据链路层地址结构以及sockaddr_storage则具有可变长度的套接字结构

 

3 字节操作函数

View Code
1 #include <string.h>
2 void bzero(void *dest, size_t nbytes);
3 void bcopy(const void *src, void *dest, size_t nbytes);
4 int bcmp(const void *src, const void *dest, size_t nbytes);
5 
6 
7 void *memset(void *dest, int c, size_t len);
8 void *memcpy(void *dest, const void *src, size_t nbytes);
9 int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);

4 字符串与网络地址转换函数

View Code
1 #include <arpa/inet.h>
2 int inet_aton(const char *strptr, struct in_addr *addrptr);
3 in_addr_t inet_addr(const char *strptr);
4 char * inet_ntoa(struct in_addr inaddr);

5 通用的字符串与网络地址转换函数

View Code
1 #include <arpa/inet.h>
2 int inet_pton(int family, const char *strptr, void *addrptr);
3 const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);

这两个函数针对IPv4和IPv6地址结构均支持

另外,为了使调用更加简洁,UNIX网络编程一书中对许多函数进行了封装,以方便调用。详细可查询unp.h头文件

 1 struct in6_addr{
 2     uint8_t   s6_addr[16]; //128位地址
 3 }
 4 
 5 struct sockaddr_in6{
 6     uint8_t    sin6_len;
 7     sa_family_t  sin6_family;
 8     in_port_t   sin6_port;
 9    
10     uint32_t    sin6_flowinfo;
11     struct    in6_addr    sin6_addr;
12    
13     uint32_t   sin6_scope_id;
14 }
posted @ 2012-10-14 20:53  iosJohnson  阅读(460)  评论(0编辑  收藏  举报