HTTPS ソケットの仕組みについて質問があります。
モバイル デバイスとサーバー間の双方向通信を実装する必要があります。
ブルートゥースデバイスから生のバイトとしてリクエストを取得していますが、リクエストはチャンクで受信され、同じ方法で応答を待ちます。つまり、デバイスが私にチャンクを送信しているので、それをサーバーに送信する必要があり、サーバーの応答をデバイスに送り返して、2 番目のチャンクを受信する必要があります。
つまり、ソケットを開いて、リクエストチャンクを書き込んで、レスポンスチャンクを読んでいますが、2番目のリクエストチャンクを書き込んでいるときに、ソケットからデータが受信されません。
コードは次のようになります。
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
ここでの問題は、このコードが最初のチャンクに対して機能することですが、データの 2 番目のチャンクでは、が即座に -1 を返すgetButesFromInputStream
ため、空の配列を返します。is.read()
誰かが私が何をすべきかを提案したり、私が間違っていることを説明したりできますか?
どんな助けでも大歓迎です。ありがとう、アークデ