Swift 套接字响应头为两位数的十六进制格式
我有一个TCP套接字连接,试图在其中响应请求消息。我的规范规定,对请求的响应应采用以下格式: 其中,标题包含两位十六进制格式的数据长度。我的响应数据是Swift 套接字响应头为两位数的十六进制格式,swift,sockets,hex,Swift,Sockets,Hex,我有一个TCP套接字连接,试图在其中响应请求消息。我的规范规定,对请求的响应应采用以下格式: 其中,标题包含两位十六进制格式的数据长度。我的响应数据是“202000000000000TEST0\u OK” 由于响应长度为25个字符,因此我假设头是25的十六进制表示,因此为0x19。但是,当发送此消息时,我从正在回复的设备返回一个未知错误 使用BlueSocket库,我使用以下方式发送回复: if(message.contains("00000000000000001")) { repl
“202000000000000TEST0\u OK”
由于响应长度为25个字符,因此我假设头是25的十六进制表示,因此为0x19。但是,当发送此消息时,我从正在回复的设备返回一个未知错误
使用BlueSocket
库,我使用以下方式发送回复:
if(message.contains("00000000000000001")) {
reply = "202000000000000TEST0_OK "
var header: UInt8 = 0x19
try socket.write(from: Data.init(bytes: &header, count: MemoryLayout<UInt8>.size))
try socket.write(from: reply)
}
if(message.contains(“0000000000000000 1”)){
回复=“202000000000000TEST0\u正常”
变量头:UInt8=0x19
尝试socket.write(from:Data.init(字节:&头,计数:MemoryLayout.size))
尝试套接字。写入(发件人:回复)
}
不幸的是,我没有任何进一步的错误信息。我很自信我对如何计算和发送标题的理解是不正确的
编辑:我还尝试了以下响应,但都失败了:
以数据字符串(25)的十进制长度开始“25xxxxxxxxxxxxxxxxxxxxxxxx”
以数据和标题字符串(27)的整个长度作为前缀“27xxxxxxxxxxxxxxxxxxxxxxxx”
前面加上数据字符串长度的十六进制表示(25个字符,因此为0x19)“19XXXXXXXXXXXXXXXXXXXXXXXXX”
以十六进制表示的整个数据长度和标题字符串(27个字符,因此为0x1B)作为前缀“1BXXXXXXXXXXXXXXXXXXXXXXXXX”
“19”
。所以您的回复应该是“reply=”19202000000000test0\u OK“。只是一个猜测。@vacawama-明智的猜测,但不幸的是,那不是它。我编辑了这个问题,以显示我刚才尝试过的类似问题。我一直在问自己,为什么他们不能在文档中提供一个简单的请求/响应示例!!1.你确定你正确阅读了说明书吗?它到底说了什么?2.您的套接字是发送响应的套接字还是发送请求的套接字?可能请求使用不同的格式…?在Wireshark中分析请求后,我注意到请求消息以空字符0x00开头。将此添加到我的响应中就成功了,所以0x00 0x19。。。我已经三次检查了文件,没有提到这一点。一个简单的问题,文档中的一个示例需要2分钟才能发现,而不是2天。