我有一个关于 HTTPS 套接字如何工作的问题。
我必须在移动设备和服务器之间实现双向通信。
我从蓝牙设备以原始字节的形式获取请求,但请求是以块的形式接收的,并且它以相同的方式等待响应。我的意思是:设备正在向我发送一个块,我必须将其发送到服务器,并且我必须将服务器响应发送回设备,以接收第二个块。
好吧,这一次有效,我的意思是我正在打开套接字,正在编写请求块,正在读取响应块,但是当我编写第二个请求块时,没有从套接字接收到数据。
代码如下所示:
if (webSocket == null) {
SocketFactory factory = SSLSocketFactory.getDefault();
webSocket = factory.createSocket(DataUtils.stringValueFromByteArray(requestPackage.getHostAddress()),
DataUtils.intValueFromByteArray(requestPackage.getHostPort()));
}
webInputStream = webSocket.getInputStream();
webOutputStream = webSocket.getOutputStream();
webOutputStream.write(requestPackage.getDataContent(), 0,requestPackage.getDataContent().length);
webOutputStream.flush();
byte[] byteBuffer = getBytesFromInputStream(webInputStream);
getBytesFromInputStream 看起来像:
public static byte[] getBytesFromInputStream(InputStream is)
throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte buf[] = new byte[8192];
int ret = 0;
while ((ret = is.read(buf)) != -1) {
bout.write(buf, 0, ret);
}
byte[] bytes = bout.toByteArray();
return bytes;
}
webSocket
请求开始时获取一个值,null
并且连接不应该结束。
现在的问题是这段代码适用于第一个数据块,但在第二个数据块上,getButesFromInputStream
返回一个空数组,因为is.read()
立即返回 -1。
任何人都可以建议我该怎么做,或者向我解释我做错了什么?
任何帮助,将不胜感激。谢谢,阿克德