我现在正在与套接字编程作斗争,我遇到了一个问题,我不知道如何以可移植的方式解决它。 任务很简单:我需要通过网络发送 16 字节的数组,在客户端应用程序中接收它并解析它。我知道,有像 htonl、htons 等函数可以与 uint16 和 uint32 一起使用。但是我应该如何处理比这更大的数据 block ?
谢谢。
最佳答案
你说的是一个 16 字节的数组。那真的没有帮助。字节序仅对大于一个字节的事物重要。
如果它真的是原始字节,那么只要发送它们,您将同样收到它们
如果它确实是一个你想要发送的结构
struct msg
{
int foo;
int bar;
.....
然后您需要通过缓冲区来提取您想要的值。
发送时必须将数据包组装成标准订单
int off = 0;
*(int*)&buff[off] = htonl(foo);
off += sizeof(int);
*(int*)&buff[off] = htonl(bar);
...
当你收到
int foo = ntohl((int)buff[off]);
off += sizeof(int);
int bar = ntohl((int)buff[off]);
....
编辑:我看到你想发送一个 IPv6 地址,它们总是按网络字节顺序排列——所以你可以直接流式传输它。
关于c - 通过套接字发送任意长度的数组。字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519155/