我被卡在了我能想到的最愚蠢的障碍上。我正在开发一个flutter应用程序,它应该通过TCP套接字(在本地wifi网络上)发送一组字节。
这些字节是原始的,并不代表任何编码中的有意义的字符(我有像0xFF等值)。我的代码成功地连接并使用socket的write
方法发送数据。不幸的是,该方法只接受一个已编码的String
作为参数,并且从char codes创建一个字符串会破坏我的消息。
以下是我的代码:
var message = Uint8List(4);
var bytedata = ByteData.view(message.buffer);
bytedata.setUint8(0, 0x01);
bytedata.setUint8(1, 0x07);
bytedata.setUint8(2, 0xFF);
bytedata.setUint8(3, 0x88);
socket.write(String.fromCharCodes(message))
当接收到0x01和0x07时,它们被正确解析,但是0xFF和0x88则转换成了另外两个字节,即0xC3BF和0xC287(使用netcat -l 8080 | hexdump
命令检查)。
我已经搜索了一段时间,想找到不将原始字节编码为字符串的方法,但是没有找到。难道这根本没有被考虑过吗?我知道Flutter和Dart是用于高级Web开发的,但我觉得这太荒谬了。
RawServerSocket
和RawSocket
后,我找到了这个Socket部分。不幸的是,我找到的示例并没有帮助我。这个答案给了我一个很好的替代方案,它真的应该出现在主页面上——谢谢。 - Ethan K