套接字(socket)与socket 编程
2024-09-05 12:04:54
- 字节序:
- 主机字节序(host byte order):不同的主机有不同的字节序,x86:小端;
- 网络字节序(network byte order):大端字节序;
0. 什么是套接字
- 套接字是网络进程间的通信(网络进程间通信,又叫 network IPC)接口,进程用该接口能够与其他进程通信,无论是否在同一台计算机上,
- 套接字是对通信端点的抽象,就像文件描述符(file descriptor)是对文件的抽象表示;
1. 基本概念
socket 可以看成是用户进程(Application,工作在用户空间)与内核网络协议栈(内核空间,kernel space)的编程接口(称为套接口);
- 以实现用户空间的应用对内核网络协议栈提供的服务的访问和调用;
socket 以下的 UDP/TCP、IP、Channel 等即为内核网络协议栈;
2. IPv4 套接字地址接口
$ man 7 ip
IPv4 套接字地址结构通常也称为“网际套接字地址结构”,以sockaddr_in
命名,定义在 <netinet.h>
中:
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
- AF_INET:代表的是 IPv4 协议;
- 此外还有 Unix 域协议;
- Network byte order:网络字节序;
3. 通用地址结构
使不同协议间的套接字地址兼容。
struct sockaddr {
uint8_t sin_len;
sa_family_t sin_family;
char sa_data[14];
}
- sin_len:整个 sockaddr 结构体的长度;
- sin_family:指定该地址家族;
- sa_data:由 sin_family 决定其形式;
4. 字节序转换函数
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t hostlong);
uint16_t ntohs(uint16_t hostshort);
- h:host,表示主机(主机字节序);
- n:network,表示网络(网络字节序);
- s:short,l:long
最新文章
- MFC如何隐藏RibbonBar的QAT QuickAccessToolBar(快速访问工具栏)
- tomcat7 Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config. The configuration may be corrupt or incomplete
- Atitit dsl exer v3 qb3 新特性
- 【转】ORATOP工具使用说明
- 【BZOJ1006】【HNOI2008】神奇的国度
- win8 任务栏不合并隐藏标题
- 一品楼论坛www.ep6.info一品楼论坛
- maven插件报错之解决
- Scala 中的 apply 和 update 方法[转]
- 简易版DES加密和解密详解
- Wampserver红色橙色解决思路----端口冲突是关键
- solr7.2安装实例,中文分词器
- AD用户属性:UserPrincipalName与SamAccountName的差别
- web页面锁屏初级尝试
- 杭店 ACM 1864 最大报销额 01背包
- Cookie 和Session 简介
- 读论文《BP改进算法在哮喘症状-证型分类预测中的应用》
- <;<;网络是怎样连接的>;>;笔记第5章 防火墙,缓存服务器
- Centos 关闭图形界面
- 「Django」rest_framework学习系列-路由