【发布时间】:2020-03-22 12:26:46
【问题描述】:
当你想绑定到 C 中的端口时,你必须使用htons(port) 将端口从主机字节顺序转换为网络字节顺序。发生这种情况是因为端口号直接复制到 TCP 数据包中,因此它们必须在 little-endian 和 big-endian 机器上匹配。
考虑以下 C 语言示例:
int port = 5000;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);
注意htons 的使用。现在,如果您运行netstat -anp --tcp(在Linux 上),您将看到0.0.0.0:5000 正在被监听。看起来端口号使用了主机字节序。
现在,问题来了:如果端口号在 URL 中是 host-endian,这是否意味着 big-endian 客户端不能使用 http://a.b.c.d:5000 URL 连接到监听 0.0.0.0:5000 的 little-endian 服务器?
【问题讨论】:
标签: url networking port endianness