HarmonyOS 鸿蒙Next socket udp广播发送如何以16进制发送

发布于 1周前 作者 caililin 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next socket udp广播发送如何以16进制发送

cke_15561.png

用测试工具以16进制发送 cf 00 cf 服务器会返回消息;

但是使用鸿蒙以16进制发送 cf 00 cf 服务器无消息回复,但是测试工具可以收到消息。

  let  jsonString = “CF 00 CF”

<span class="hljs-keyword"><span class="hljs-keyword">const</span></span> hexBytes = jsonString.split(<span class="hljs-string"><span class="hljs-string">' '</span></span>).map(hex =&gt; {
  <span class="hljs-comment"><span class="hljs-comment">// 将每个16进制数转换为十进制数(字节)</span></span>
  <span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-built_in"><span class="hljs-built_in">parseInt</span></span>(hex, <span class="hljs-number"><span class="hljs-number">16</span></span>);
});
<span class="hljs-comment"><span class="hljs-comment">// 创建一个Uint8Array来存储字节数据</span></span>
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> objbuff: <span class="hljs-built_in"><span class="hljs-built_in">Uint8Array</span></span> = <span class="hljs-keyword"><span class="hljs-keyword">new</span></span> <span class="hljs-built_in"><span class="hljs-built_in">Uint8Array</span></span>(hexBytes);


<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> remoteAddress:socket.NetAddress = { address: <span class="hljs-string"><span class="hljs-string">"255.255.255.255"</span></span>, port: <span class="hljs-number"><span class="hljs-number">10061</span></span>, family: <span class="hljs-number"><span class="hljs-number">1</span></span> }
<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.udpSocket.send({ data:objbuff.buffer, address: remoteAddress })
  .then( () =&gt; {
    console.log(<span class="hljs-string"><span class="hljs-string">'setExtraOptions fail'</span></span>);
  })
  .catch((e:BusinessError) =&gt; {
    console.log(<span class="hljs-string"><span class="hljs-string">'setExtraOptions fail'</span></span>);
  })</code></pre>  <p>这是我发送消息的代码,该如何向网络测试工具一样以16进制形式发送,或者是其他问题。</p>  <p>求大佬解答。</p></div></div>
2 回复

Socket.send的data参数仅支持string字符串或者ArrayBuffer二进制字节数组,应该是不支持直接按十六进制发送的

在HarmonyOS(鸿蒙)系统中,通过Next socket进行UDP广播并以16进制发送数据,可以通过以下步骤实现:

  1. 创建UDP Socket: 使用socket(AF_INET, SOCK_DGRAM, 0)创建一个UDP套接字。

  2. 设置广播选项: 使用setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &(int){1}, sizeof(int))启用广播选项。

  3. 构造UDP广播地址: 设置目标地址为广播地址,例如255.255.255.255,并配置相应的端口号。

  4. 数据转换: 将要发送的数据从字符串或其他格式转换为16进制形式。可以使用C语言中的sprintfsnprintf函数,配合%02X格式说明符,将每个字节转换为两位16进制字符串。若直接发送字节数组,则无需转换,只需确保数据按预期格式组织。

  5. 发送数据: 使用sendto函数发送数据。若数据已是字节数组形式,则直接发送;若已转换为16进制字符串,需重新转换为字节数组或按协议规定发送字符串。

请注意,数据格式需符合通信协议要求。若协议要求发送16进制表示的字符串,则需进行适当转换。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部