我正在尝试编写将与任何可以建立套接字连接的标准客户端(例如 telnet 客户端)通信的服务器
它最初是一个回显服务器,当然不需要担心网络字节顺序。
我熟悉ntohs、ntohl、htons、htonl函数。如果我要传输 16 位或 32 位整数,或者要发送的字符串中的字符是 2 或 4 个字节的倍数,这些本身就很棒。
我想创建一个对字符串进行操作的函数,例如:
str_ntoh(char* net_str, char* host_str, int len)
{
uint32_t* netp, hostp;
netp = (uint32_t*)&net_str;
for(i=0; i < len/4; i++){
hostp[i] = ntoh(netp[i]);
}
}
或类似的东西。上面的事情假设字大小是 32 位。我们不能确定发送机器上的字大小不是 16 位还是 64 位,对吗?
对于客户端程序,例如 telnet,它们必须在发送前使用 hton*,在接收数据后使用 ntoh*,对吗?
编辑:对于那些因为 1-char 是字节序无关紧要的字节的人:
int main(void)
{
uint32_t a = 0x01020304;
char* c = (char*)&a;
printf("%x %x %x %x\n", c[0], c[1], c[2], c[3]);
}
运行这段代码。我的输出如下:
$ ./a.out
4 3 2 1
那些使用 powerPC 芯片组的人应该得到“1 2 3 4”,但我们这些使用 intel 芯片组的人应该看到我上面得到的大部分内容。