⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 套接口编程基础.txt

📁 学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
💻 TXT
字号:
套接口编程基础
 

--------------------------------------------------------------------------------
 
第八军团 时间:2004-1-17 21:37:40 
   
     
  
    
IPv4 套接口地址结构 
struct in_address { 
in_addr_t s_addr ; 
} 
// 32bits IPv4 地址 
//网络字节顺序 Network Byte Order 

struct sockaddr_in{ 
unit8_t sin_len; //长度成员, 无需设置 
sa_family_t sin_family; //套接口结构地址族,AF_INET 
in_port_t sin_port; //16位TCP 或 UDP 端口号 
struct in_addr sin_addr; //32位TCP 或 UDP 端口地址 
char sin_zero[8]; //未用 
} 
//in: internet 
//s: socket 


-------------------------------------------------------------------------------- 

通用套接口地址结构 
套接口地址结构仅在给定主机上使用。结构中的某些成员(IP地址和端口号)用在不同主机 

间的通信中,但结构本身并不参与通信. 

当作为参数传递给任一个套接口函数时,套接口地址结构总是通过指针来传递,但通过指 

针来取得此参数的套接口函数必须处理来自所支持的任何协议族的套接口地址结构. 

通用套接口结构 

struct sockaddr{ 
uint8_t sa_len; 
sa_family_t sa_family; 
char sa_data[14] 
}; 

通用的套接口地址结构的用途:给指向持定于协议的地址结构的指针转换类型。 


-------------------------------------------------------------------------------- 

强制类型转换 
函数的调用: 

将指向特定于协议的套接口地址结构的指针类型-> 指向通用套接口地址结构的指针。 

函数原型: 
int connect( int, struct sockaddr *, socklen_t) 

.............. 
struct sockaddr-in servaddr; 

.................. 

connect(sockfd,(sturct sockaddr *) &servaddr, sizeof(servaddr)); 
..................... 


-------------------------------------------------------------------------------- 

字节排序函数 
一个16位整数,它由2个字节组成。 

内存中存储这两个字节有两种方法: 

小端字节序:低序字节存储在起始地址 

大端字节序:高序字节存储在起始地址 

网际协议必须指定一个网络字节序(Network Byte Order) 

主机字节序和网络字节序的转换函数: 

#include <netinet/in.h> 
unit16_t htons(uint16_t host16bitvalue); 

unit32_t htons(uint32_t host32bitvalue); 

unit16_t ntohs(uint16_t net16bitvalue); 

unit32_t ntohs(uint32_t net32bitvalue);  

h : host  
n : network 
s : short (16 bits) 
l : long (32 bits)  


-------------------------------------------------------------------------------- 

字节/字节流操纵函数 
void bzero(void *dest,size_t nbytes);//清零 

void bcopy(const void *src,void *dest,siz_t nbytes); 

int bcmp(const void *ptr1,const void *ptr2,size_t nbytes); 

返回:0——相等,非0——不相等 
void *memset(void *dest,int c,size_t len); 

void *memcpy(void *dest,const void *src,size_t nbytes); 

it memcmp(const void *ptr1,const void *ptr2,size_t nbytes); 

返回:0——相同,非0——不相同 

字节流读写函数 

ssize_t readn(int filedes, void * buff, size_t nbytes); 

ssize_t writen(int filedes, const void *buff, size_t nbytes); 

ssize_t readline(intfiledes, void *buff, size_t maxlen); 


-------------------------------------------------------------------------------- 

地址转换函数 
#include <arpe/inet.h> 

int inet_aton(const char *strptr,struct in_addr *addrptr); 

返回:1——串有效,0——串出错 

in_addr_t inet_addr(const char *strptr); 

返回:若成功,返回32位二进制的网络字节序地址;若出错,则返回INADDR_NONE 

char *inet_ntoa (struct in_addr inaddr); 

返回:指向点分十进制数串指针  

ine-aton 将 strptr 所指的C字符串转换成32位的网络字节序二进制值并通过指针 

addrptr来存储。如果成功返回1,否则返回0。 

inet-addr 将 strptr 所指的C字符串转换成32位的网络字节序二进制值并通过涵数值返回。 

函数inet-ntoa将一个32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。 

如: 202.116.34.194.4000 (IP:202.116.34.194 端口4000) 

可用于 IPv4 和 IPv6的函数 

int inet_pton(int family,const char *strptr,void *addrptr); 

const char *inet_ntop(int family.const void *addrptr,char *strptr,size_t len); 

p: presentation 地址的表示 202.116.34.194 

n: numeric 数值格式 16bits/32bits integer 


family : AF_INET 或 AF_INET6 
 
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -