套接字地址结构笔记----C++网络编程
2017-11-23 15:08
387 查看
1.IPv4套接字地址结构:
struct in_addr
{
in_addr_t s_addr;
}
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}(1)sin_len是为了增加对OSI协议的支持随着4.3BSD-Reno添加的。
(2)其他几个都是平常网络编程最频繁看到的数据结构。
(3)sin_zero[8]字段几乎不曾用过,我们总是把这个设置为0,但是一般不是直接设置为0,而是先将整个结构全部置零在填写其他的。
就像在之前的一个简单服务器中的那串代码:
bzero(&servaddr,sizeof(servaddr));这行代码也看到了,servaddr传参数的时候都是pass by reference!!!!!
2.通用套接字地址结构
(1)为什么要有这个?因为传递套接字函数的是by reference,所以指针的类型是个很重要的问题。所以前人的解决方式:
在<sys/socket.h>头文件中定义一个通用的套接字地址结构:
struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
};(2)于是套接字函数被定义为以某个通用套接字地址结构的一个指针作为参数之一
bind(int , struct sockaddr * ,socklen_t);这里发生了一个类型强制从转换:
struct sockaddr_in serv;
bind(sockfd,(struct sockaddr*) &serv,sizeof(serv)); 3.IPv6套接字地址结构
struct in6_addr
{
unit8_t s6_addr[16];
};
#define SIN6_LEN
struct sockaddr_in6
{
uint8_t sin6_len;
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo; //32位流标
struct in6_addr sin6_addr; //128位IPv6地址
uint32_t sin6_scope_id;
}; 4.新的通用套接字地址结构
在<netinet/in.h>
struct sockaddr_storage
{
uint8_t ss_len;
sa_family_t ss_family;//后面还有对用户透明的接口,足够大!
};新的通用套接字能够容纳下系统支持的任何套接字地址结构。
struct in_addr
{
in_addr_t s_addr;
}
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}(1)sin_len是为了增加对OSI协议的支持随着4.3BSD-Reno添加的。
(2)其他几个都是平常网络编程最频繁看到的数据结构。
(3)sin_zero[8]字段几乎不曾用过,我们总是把这个设置为0,但是一般不是直接设置为0,而是先将整个结构全部置零在填写其他的。
就像在之前的一个简单服务器中的那串代码:
bzero(&servaddr,sizeof(servaddr));这行代码也看到了,servaddr传参数的时候都是pass by reference!!!!!
2.通用套接字地址结构
(1)为什么要有这个?因为传递套接字函数的是by reference,所以指针的类型是个很重要的问题。所以前人的解决方式:
在<sys/socket.h>头文件中定义一个通用的套接字地址结构:
struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
};(2)于是套接字函数被定义为以某个通用套接字地址结构的一个指针作为参数之一
bind(int , struct sockaddr * ,socklen_t);这里发生了一个类型强制从转换:
struct sockaddr_in serv;
bind(sockfd,(struct sockaddr*) &serv,sizeof(serv)); 3.IPv6套接字地址结构
struct in6_addr
{
unit8_t s6_addr[16];
};
#define SIN6_LEN
struct sockaddr_in6
{
uint8_t sin6_len;
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo; //32位流标
struct in6_addr sin6_addr; //128位IPv6地址
uint32_t sin6_scope_id;
}; 4.新的通用套接字地址结构
在<netinet/in.h>
struct sockaddr_storage
{
uint8_t ss_len;
sa_family_t ss_family;//后面还有对用户透明的接口,足够大!
};新的通用套接字能够容纳下系统支持的任何套接字地址结构。
相关文章推荐
- [Linux网络编程学习笔记]套接字地址结构
- Unix 网络编程基础----套接字地址结构
- Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简单介绍
- 我的网络编程学习之路——套接字地址结构
- 六、Linux网络编程-socket、套接字地址结构、地址转换、字节序、套接字类型
- linux网络编程中的地址结构
- C++网络编程学习笔记1
- 【UNIX网络编程(一)】套接字地址结构、网络字节顺序和地址转换功能
- C语言地址对齐(转)--网络编程之结构体大小的计算
- UNIX 网络编程笔记-CH3:套接字编程简介
- Unix网络编程学习笔记【1】套接字地址结构
- C++ 网络编程:一个可复用的套接字管理类和一个简单用例
- C/C++ 网络编程3: 套接字基础
- 网络编程中常见地址结构与转换(IPv4/IPv6)
- Unix网络编程学习笔记【1】套接字地址结构
- 网络编程笔记一、Socket套接字
- Symbian编程总结-网络与通信-套接字(1)-套接字体系结构与相关API