当您要绑定到C中的端口时,必须使用htons(port)
将端口从主机字节顺序转换为网络字节顺序。发生这种情况是因为端口号直接复制到TCP数据包,因此它们必须在小端和大端机器上匹配。
考虑下面的示例在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服务器?] >
当您要绑定到C中的端口时,必须使用htons(port)将端口从主机字节顺序转换为网络字节顺序。发生这种情况是因为端口号被直接复制到TCP ...
不,您几乎肯定会在错误的抽象级别错误地应用规则。