通过套接字发送任意长度的数组.字节序
作者:互联网
我现在正在使用套接字编程,我遇到了一个问题,我不知道如何以便携方式解决.
任务很简单:我需要通过网络发送16字节的数组,在客户端应用程序中接收它并解析它.我知道,有一些函数,如htonl,htons等,可以与uint16和uint32一起使用.但是,我应该如何处理大于此数据的数据呢?
谢谢.
解决方法:
你说一个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-3,linux,sockets,endianness,network-programming 来源: https://codeday.me/bug/20190726/1546526.html