サーバークライアントアプリケーションを開発しています。サーバーはJava(PC)で実行され、クライアントはJavaで実行されます。(アンドロイド)
次の実装で問題が発生しています。
サーバーはビットマップを取得します->rawバイト->TCP->クライアント(非同期ストリーム
これで、バイト配列はクライアントで長さの異なる複数のパケットで配信されます。したがって、これを適切に処理するには、prefixメソッドを使用する必要があります。
プレフィックスモードを使用するには、メッセージの長さをバイト単位で4バイトとして送信してから、メッセージを送信する必要があります。
私のコード
public void sendScreenshot(byte[] buffer) throws IOException {
OutputStream os = socket.getOutputStream();
os.write(buffer.length + 1);
os.write((byte) 0);
os.write(buffer, 0, buffer.length);
os.flush();
}
VB.netでは、これは次のコードで実現されます。
Private Sub dat(ByVal dat As String)
Dim nstream As NetworkStream = sock.GetStream()
Dim bit As Byte() = System.Text.Encoding.UTF8.GetBytes(dat)
Dim bw As New BinaryWriter(sock.GetStream())
bw.Write(bit.Length + 1)
bw.Write((byte)command)
bw.Write(bit, 0, bit.length)
End Sub
Javaでそれを実装する助けは大歓迎ですか?