其他分享
首页 > 其他分享> > 通过套接字发送任意长度的数组.字节序

通过套接字发送任意长度的数组.字节序

作者:互联网

我现在正在使用套接字编程,我遇到了一个问题,我不知道如何以便携方式解决.
任务很简单:我需要通过网络发送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