标签:c-3 linux sockets endianness network-programming
我现在正在使用套接字编程,我遇到了一个问题,我不知道如何以便携方式解决.
任务很简单:我需要通过网络发送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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。