2017-09-29 10 views
-2

私は、OutputStreamを持つサーバーに要求を送信するTCPソケットクライアントを持っています。JavaでTCPを介して混合文字列とバイトを送信


REQ OPのファイルサイズデータ


サーバーin.readLineを(使用して情報を受信する)し、データを新しい.txtファイルを作成する必要があります。私は、この例のようなものを送信する必要があります受け取った。 私の問題は、私は情報を分析するためにトークンに分割を使用し、私はいくつかのバイトが失われていると思うので、バイト配列上の "データ"文字列を変換できないということです。

データを失うことなく、1行/コマンドでデータをサーバーに送信するにはどうすればよいですか(Byte配列とStringを混在させる必要があるため)

+0

これは実際のコマンドラインから実行されるコマンドか、TCP/IP接続を介してプログラムによって送信されるコマンドですか? –

+0

コマンドは、同じデータを受信した.txtファイルを作成する必要があるサーバーによって処理されます。しかし、私はプロセスでバイトを失い、私はファイルを再度作成することはできません –

+0

私は本当にここで問題を取得していません。送信時にバイトが失われるのはなぜですか? –

答えて

0

編集

あなたがStringをBase64でエンコードされたバイナリデータを変換することによって、完全Stringするコマンドを強制することができます。これは、1行のデータをStringとして受け取るため、分割する方が簡単なため、サーバー側で解析作業が簡単になります。これはHTTPの仕組みに似ています。

また、コマンドを処理する際に、Base64でエンコードされたデータをサーバーのbyte[]に変換することを忘れないでください。

0

DataOutputStreamを使用すると、さまざまな種類のストリームを送信できます。

ストリームを初期化した後は、DataInputStreamを使用して、サーバー上で(異なるタイプの)データを受信できます。

おそらく、それはワンライナーではないかもしれませんが、ストリームは「1ライナー」のデータを持つようには設計されていません。

ストリームを送信する場合は、dataOutputStream.writeInt()/。write(bytes)またはwriteUTF()を送信するだけです。

dataInputStreamでは、もちろんreadInt()/。read(bytes)またはreadUTF()を使用する必要があります。

編集:TCPストリームを使用すると、UDPのようなバイトドロップがあると接続が切断されるため、「緩い」データがないことを確認します。

関連する問題