2016-05-30 13 views
1

クライアント - サーバーアーキテクチャでSocketを使用して単純なバイト配列を送信しようとしています。それが与えるので、問題は、NetBeansとデバッグにもありますバイト配列をソケット経由で転送する

のSocketException:接続が

をリセットだから私は私のコードの下に投稿し、私は誰かが私を助け本当にあればしたいと思います。

クライアント:

public class TestClient { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    try { 
     Socket s = new Socket("127.0.0.1", 3242);  

     byte[] b; 
     b = "Hello".getBytes(); 
     DataOutputStream os = new DataOutputStream(s.getOutputStream()); 
     os.write(b); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


} 

}

サーバー:

public class TestServer { 

public static void main(String[] args) { 
    try { 

     byte[] b = new byte[5]; 
     Socket s = new ServerSocket(3242).accept(); 
     DataInputStream is = new DataInputStream(s.getInputStream()); 
     is.read(b); 
     System.out.println(String.valueOf(b)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }   
} 

}

私は単にのInputStreamとOutputStreamを使用しようとしましたが、動作は同じです。

上記のこれらのコードを実行した結果は次のとおりです。

[[email protected] 

ご清聴ありがとうございました。

答えて

0

は、これにより、この

System.out.println(String.valueOf(b)); 

を交換してください:

System.out.println(new String(b)); 

この

default encodingを使用して Stringにあなたのバイト配列に変換します。 [ System.out.println(new String(b, encoding))

+0

問題が解決しました。ありがとう。 :) –

+0

npbr、あなたは大歓迎です –

0

あなたのケースでは、String.valueOfはオブジェクトを入力として受け取り(それをオブジェクトとして扱うため)です。

文字列を受け取りたい場合は、代わりにnew String(b)またはnew String(b, "UTF-8")を呼び出すことができます。

+0

TestServer今すぐ結果がで

"Hello".getBytes(encoding)

TestClientで72:サーバーとクライアントの両方が同じdefault encodingを使用する場合、それはそうあなたに次の両方の側でエンコーディングを指定する必要があります動作します、101,108,108,111]。これはバイト単位の "Hello"の正しい表現です。これから、「Hello」をStringとして戻すにはどうすればいいですか?ありがとう。 (@ NicolasFilottoはStringコンストラクタを使って私に道を与えました)もう一度ありがとう。 –

関連する問題