URL中使用的端口字节顺序是什么?
当您想绑定到C中的端口时,必须使用URL中使用的端口字节顺序是什么?,url,networking,port,endianness,Url,Networking,Port,Endianness,当您想绑定到C中的端口时,必须使用htons(port)将端口从主机字节顺序转换为网络字节顺序。发生这种情况是因为端口号直接复制到TCP数据包,所以它们必须在小端和大端机器上匹配 考虑C中的以下示例: int端口=5000; 地址中的结构sockaddr\u; addr.sin_family=AF_INET; addr.sin_addr.s_addr=htonl(INADDR_ANY); 地址SINU port=htons(端口); 注意htons的用法。现在,如果运行netstat-anp-
htons(port)
将端口从主机字节顺序转换为网络字节顺序。发生这种情况是因为端口号直接复制到TCP数据包,所以它们必须在小端和大端机器上匹配
考虑C中的以下示例:
int端口=5000;
地址中的结构sockaddr\u;
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
地址SINU port=htons(端口);
注意htons
的用法。现在,如果运行netstat-anp--tcp
(在Linux上),您将看到正在侦听0.0.0.0:5000
。端口号似乎使用了主机端号
现在,一个问题出现了:如果端口号是URL中的主机端,这是否意味着big-endian客户端不能使用
http://a.b.c.d:5000
URL连接到一个小的endian服务器,监听0.0.0:5000
?不,您几乎肯定在错误的抽象级别误用了规则
本地浏览器很可能会从URL末尾抓取:5000
字符串,并使用该字符串以主机格式创建整数5000
。然后它将把它传递给htons
,作为构建会话的一部分,方式与代码片段完全相同
瞧,这些结构包含了正确的网络顺序