2012-05-01 14 views
-1

私はJavaでソケット上でバイト配列を転送するアプリケーションを書いています。ソケットからバイト配列を読み取ることができません

次のようにクライアント側でバイト配列の生成は次のとおりです。サーバー側で

String vote = br.readLine(); 
// the data that i now encrypt using RSA 

      PublicKey pubKey = readKeyFromFilepublic("alicepublic.txt"); 
      Cipher cvote = Cipher.getInstance("RSA"); 
      cvote.init(Cipher.ENCRYPT_MODE, pubKey); 
      byte[] voted = cvote.doFinal(vote.getBytes()); 
      System.out.println(voted); 
      out.println(voted.length); 
      dos.write(voted,0,voted.length); // here i am sending the array to the server 

は、私は、ファイルに書き込むことにより、暗号化と復号化のプロセスをチェックした

String clen = in.readLine(); // read the length 
byte[] array = new byte[Integer.parseInt(clen)]; // create the array of that length 
dist.readFully(array); // read the array 

// i am unable to read the array here at all ! 

PrivateKey priKey = readKeyFromFileprivate("aliceprivate.txt"); 
Cipher vote = Cipher.getInstance("RSA"); 
vote.init(Cipher.DECRYPT_MODE, priKey); 
byte[] voteData = vote.doFinal(array); 
System.out.println(voteData); 

// finally print the decrypted array 

を書きますそれは適切に動作します。

私は両方の端でDataInputとDataOutputストリームを使用しています。

私のコードで何が問題なのか教えてください。

+0

どういう例外がありますか?エラー?スタックトレース? – beny23

+0

例外は発生せず、ソケットからバイト配列を読み取るのを待ちます。 –

答えて

2

文字データとバイナリデータを同じストリーム(少なくとも異なるストリームではない)に混在させないでください。あなたは "in"のタイプを表示しませんでしたが、私はそれがBufferedReader(ここでは "バッファされた"という重要なポイント)であると推測しています。 BufferedReaderはを次の行よりもと読み込みます。したがって、あなたのbyte []の一部があなたのBufferedReaderに座っています。ストリーム上のすべての操作に同じDataOutputStream/DataInputStreamを使用します。テキストデータを書き込む必要がある場合は、writeUTF/readUTFを使用します。 byte []の長さを書くときは、writeInt/readIntを使うだけです。

+0

ありがとうございました。コード全体を書き直し、ストリームを1つだけ使用しました!今の魅力のように働く!それは多くの助けとなりました –

関連する問題