我的服務器端Dart應用程序從套接字接收JSON字符串。該字符串由Java代碼生成。當該字符串被髮送到Java代碼中的套接字時,它將被編碼爲UTF8,並且兩個字節(短整型)被預置爲該字符串。這個短的值是字符串+ 2中的字節數。Dart如何解析字符串中的字節
我需要將該值作爲int提取以處理字符串,但沒有任何我嘗試過的工作。它死於JSON.decode(下面),因爲它遇到另一個JSON字符串的開始。第二個字符串的第一個字節是第二個JSON字符串長度的開始。這兩個字符串每個都少於40個字符長。
(I需要將長度追加到從達特發送到Java以及字符串。)
爪哇線
out.writeUTF(json); // converts and writes to the socket stream.
達特服務器端代碼方法
handleJavaSocket(Socket javasocket){
javasocket.transform(UTF8.decoder).listen((String socketString){
var truncated = socketString.substring(2);
String message = JSON.decode(truncated); // dies here
// more code
}, onError: (error) {
print('Bad JavaSocket request');
});
}
之一編碼前的JSON字符串
{"target":"DOOR","command":"OPEN"}
這就是我認爲的,當Java代碼發送一個字符串並且Dart發回它時它工作正常。然後,我將Java代碼設置爲發送第二個字符串,經過一些計算後,似乎第二個字符串(或上帝禁止 - 的一部分)被附加到第一個字符串。 Java代碼和Dart代碼都將駐留在同一臺計算機上並異步發送字符串,所以我不能排除這種串聯不會發生在最終的應用程序中。我看到Dart支持UDP ... –
我也使用UDP,這將對您的應用程序有意義,此外,您還可以刪除長度編碼! – jtmcdole