| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> SOCKET Internet Domain -> 正文阅读 |
|
[网络协议]SOCKET Internet Domain |
1. Internet domain socketInternet domain 流socket 是基于 TCP 之上的,它们提供了可靠的双向字节流通信信道。 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。 Internet domain 数据报 socket 是基于 UDP 之上的, UDP socket 与之在 Unix domain 中的对应实体类似,但需要注意下列差异:
2. 网络字节序IP 地址和端口号是整数值,在将这些值在网络中传递时碰到的一个问题是不同的硬件结构会以不通的顺序来存储一个多字节整数的字节,如下图可以看出,存储整数时,先存储(最小内存地址处)最高有效位的被称为大端,那些先存储最低有效位的被称为小端。小端结构中最值得关注的是 x86,其他大多数架构都是大端的,有些硬件设备可以在两种格式之间来回切换。在特性主机上使用的字节序被称为主机字节序。 由于端口号和 IP 地址必须在网络中的所有主机之间传递并且需要它们被理解,因此必须要使用一个标准的字节序,这种字节序被称为网络字节序,是大端的。有时候可能会直接使用 IP 地址和端口号的整数常量形式,比如可能会选择将端口号硬编码进程序中,或者将端口号作为一个命令行参数传递给程序,或者在指定一个 IPV4地址时,使用类似 IMADDR_ANY 和 INADDR_LOOPBACK 之类的常量。这些值在 C 语言中是按照主机的规则来表示的。 htons(), htonl(), ntohs()以及 ntohl()函数被定义用来在主机和网络字节序之间转换整数。
3. Internet socket 地址3.1 IPv4 SOCKET地址: struct sockaddr_in一个ipv4 socket 地址会被存放在一个sockaddr_in 结构中,该结构在<netinet/in.h>中进行定义,具体如下:
3.2 inet_pton()和 inet_ntop()函数inet_pton 和 inet_ntop 函数允许在 IPV4和 IPV6地址的二进制形式和点分十进制表示法或者十六进制字符串表示法之间相互转换。
这两个函数名称中, P 表示『展现, presentation』, N表示『网络,network』.展现形式是人类可以轻松理解的字符串。 inet_pton()函数将 src_str 中包含的字符串转换成网络字节序的二进制 IP 地址,domain 参数应该被指定为 AF_INET 或者 AF_INET6,转换得到的地址会被存放在 addrptr 指向的结构体中。它应该根据在 domain 参数中指定的值指向一个 in_addr 或者 in6_addr。 inet_ntop()函数执行逆向转换,同样 domain 也需要被指定为 AF_INET 或者 AF_INET6, addrptr 指向一个待转换的 in_addr 结构体变量,得到的是以 null 结尾的字符串,会被放置在 dst_str 指向的缓冲器。len 参数必须指定为缓冲器的大小。 3.3 getaddrinfo() 函数给定一个主机名和服务名,getaddrinfo 函数返回一个 socket地址结构体列表,每个结构体都包含一个地址和端口号。
node:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串); service:服务名可以是十进制的端口号,也可以是已定义的服务名称,如ftp、http等; hints:可以是一个空指针,也可以是一个指向某个 addrinfo结构体的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。举例来说:如果指定的服务既支持TCP也支持UDP,那么调用者可以把hints结构中的ai_socktype成员设置成SOCK_DGRAM使得返回的仅仅是适用于数据报套接口的信息。res:本函数通过result指针参数返回一个指向addrinfo结构体链表的指针。返回值:0——成功,非0——出错。 addrinfo 结构的形式如下:
以下是 man 命令中给出的详细 demo描述该函数:
? |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:23:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |