HarmonyOS 鸿蒙Next socket udp广播发送如何以16进制发送
HarmonyOS 鸿蒙Next socket udp广播发送如何以16进制发送
用测试工具以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 => {
<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( () => {
console.log(<span class="hljs-string"><span class="hljs-string">'setExtraOptions fail'</span></span>);
})
.catch((e:BusinessError) => {
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进制发送数据,可以通过以下步骤实现:
-
创建UDP Socket: 使用
socket(AF_INET, SOCK_DGRAM, 0)
创建一个UDP套接字。 -
设置广播选项: 使用
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &(int){1}, sizeof(int))
启用广播选项。 -
构造UDP广播地址: 设置目标地址为广播地址,例如
255.255.255.255
,并配置相应的端口号。 -
数据转换: 将要发送的数据从字符串或其他格式转换为16进制形式。可以使用C语言中的
sprintf
或snprintf
函数,配合%02X
格式说明符,将每个字节转换为两位16进制字符串。若直接发送字节数组,则无需转换,只需确保数据按预期格式组织。 -
发送数据: 使用
sendto
函数发送数据。若数据已是字节数组形式,则直接发送;若已转换为16进制字符串,需重新转换为字节数组或按协议规定发送字符串。
请注意,数据格式需符合通信协议要求。若协议要求发送16进制表示的字符串,则需进行适当转换。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html
回到顶部