【发布时间】:2014-08-06 19:24:08
【问题描述】:
我的 C 端有一个 SSL 函数,它只接收发送的确切字节数。问题是我正在从我的 servlet 发送不同字节长度的字符串和 JSON。
我的方法:我先发送每个字符串的长度,然后再发送实际消息。
//For Json String (349 bytes)
outputstreamwriter.write(jsonLength);
outputstreamwriter.write(jsonData);
outputstreamwriter.flush();
// For other request strings
final String path = request.getPathInfo();
String all_Users = "GET ALL USERS";
String user_length = Integer.toString(all_Users.length());
String all_Keys = "GET ALL KEYS";
String key_length = Integer.toString(all_Keys.length());
if (path == null || path.endsWith("/users"))
{ outputstreamwriter.write(user_length);
outputstreamwriter.write(all_Users);
}
else if (path.endsWith("/keys")) {
outputstreamwriter.write(key_length);
outputstreamwriter.write(all_Keys);
}
在 C 端:我首先读取传入字节的传入字符串长度,然后再次调用该函数以期待该消息。现在,我的 Json 是 349,而其他请求是 12。这些分别是 3 和 2 字节。
debug_print("Clearing Buffer\n", NULL);
memset(inBuf, 0, 1024);
ssl_recv_exactly(rs_ssl, inBuf, 2, &ssllog))
lengthValue = atoi(inBuf);
printf("successfully received %d bytes of request:\n<%s>\n", lengthValue, inBuf);
}
if (lengthValue == 13)
{
// Call this function
else if (lengthValue == 12)
{
// call this function
}
当前解决方案:我在我的 2 字节请求中添加一个零,以使它们成为 3 字节。有什么更聪明的方法吗?
【问题讨论】:
-
将长度作为二进制数而不是数字字符串发送可能更容易
-
嗯……是的。我同意你的看法,德鲁。我可以将它们作为 int 发送。
-
二进制长度效率更高,但我建议您使用网络顺序以避免字节顺序问题...
-
尝试 Integer.toBinaryString(json_Data.length())。你建议我把它作为一个字符串发送吗?还是有其他方法?
标签: java c json sockets servlets