unix网络编程之套接字编程简介
来源:互联网 发布:软件图片处理 编辑:程序博客网 时间:2024/05/17 03:03
一 套接字地址结构
大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。
1.IPV4套接字地址结构(网际套接字地址结构),以sockaddr_in命名。头文件:<netinet/in.h>,长度最少16字节。
POSIX定义:
struct in_addr{
in_addr_t s_addr;
};
struct sockaddr_in {
uint8_t sin_len; /*length of structure(16)*/
sa_family_t sin_family; /*AF_INET */
in_port_t sin_port; /*16bit的TCP或UDP端口号*/
struct in_addr sin_addr; /*32bit IPV4 address */
char sin_zero[8]; /* unused */
};
in_addr_t IPV4地址,一般为uint32_t;
in_port_t TCP或者UDP端口,一般为uint16_t
2 字节排序函数
小端字节序:低序字节存储在起始地址。
大端字节序:高序字节存储在起始地址。
主机字节序(host byte order)
网络字节序(network byte order)(大多数是大端字节序)
主机字节序和网络字节序之间转换函数:
#include <netinet/in.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue); 均返回网络字节序的值
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);均返回主机字节序的值
h:host n:network s:short l:long
3字节操纵函数
#include <string.h>
void bzero(void *dest,size_t nbytes);
void bcopy(const void *src,void *dest,size_t nbytes);
int bcmp(const void *ptrl,const void *ptr2,size_t nbytes);若相等返回0;
bzero把目标字节串指定数目的字节置0,常用此函数把一个套接字地址结构初始化为0(目标字节串是void*指针)。
bcopy将指定数目的字节从源字节移到目标字串。
bcmp比较两个任意的字节串。
#include <string.h>
void *memset(void *dest,int c,size_t len);
void *memcpy(void *dest,const void *src,size_t nbytes);
int memcmp(const void *ptr1,const void *ptr2,size_t nbytes);
memset将目标字串指定数目的字节置为c。
memcpy类似bcopy,当源与目标字节串重叠时,bcopy能正确处理,memcpy不能。
4 地址转换函数
在ASCII字符串与网络字节序的二进制值转换(如192.168.1.1转换为二进制数)
#include <arpa/inet.h>
int inet_aton(const char *str,struct in_addr *add);返回:若字符串有效返回1,否则返回0
in_addr_t inet_addr(const char *str);已废弃
char *inet_ntoa(struct in_addr inaddr);返回:指向一个点分十进制数串的指针
inet_aton将str所指向的C字符串转换为一个32位的网络字节序二进制值,并存储在add指向的单元;
inet_ntoa将一个32位的网络字节序二进制值转换为相应的点分十进制数串,值得注意的是该函数是以结构为参数而不是指针。
(以上只适用于IPV4)
#include <arpa/inet.h>
int inet_pton(int family,const char *str,void *add);
const char *inet_ntop(int family,const void *add,char *str,size_t len);
family参数:AF_INET或者AF_INET6。
inet_pton将str所指向的字符串转换为二进制地址并存储在add所指中。
inet_ntop进行相反的操作,len参数是目标存储单元的大小,以免该函数溢出其调用者的缓冲区:
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46
- unix网络编程之套接字编程简介
- UNIX网络编程---套接字编程简介(三)
- 《UNIX网络编程》 第三章 套接字编程简介
- UNIX网络编程笔记 第三章 套接字编程简介
- Unix网络编程三——套接字编程简介
- Unix网络编程(三)--套接字编程简介
- UNIX网络编程2:套接字编程简介
- Unix网络编程学习笔记之第3章 套接字编程简介
- UNIX网络编程:套接字
- Unix网络编程之基本TCP套接字编程
- UNIX网络编程:基础套接字编程
- unix网络编程之套接字地址结构
- unix网络编程之基本套接字函数
- UNIX网络编程之套接字学习小结
- 《网络编程》套接字编程简介
- 《unix网络编程》套接字选项
- UNIX网络编程---路由套接字(十八)
- 【Unix 网络编程】说说 socket 套接字
- Android源码博文集锦4
- 杭电暑期多校集训—Is Derek lying?
- 使用Maven整合Spring+SpringMVC+Hibernate
- * 24种设计模式——组合模式
- 网站打开速度慢的原因分析及对策
- unix网络编程之套接字编程简介
- Web App、Hybrid App与Native App的设计差异
- 收集的伪静态中经常使用的一些参数
- 移动端上传预览压缩图片
- DOCX4J 解析DOCX文档字体格式
- linux文件管理基本命令
- @EnableAsync和@Async开始异步任务支持
- 密码
- Repo 简介