0

私はソケットクライアントからバイト配列を次のように書いています:

byte[] arr = { 49, 49, 49, 49, 49};

InetAddress address = InetAddress.getByName(host);
connection = new Socket(address, port);
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();

受信側では、サーバー上に次のものがあります。

byte[] msgType = new byte[5];
in = new BufferedInputStream(connection.getInputStream());
int bytesRead = in.read(msgType, 0, 5);

System.out.println("msg rcvd: " + msgType.toString());

出力に奇妙な文字列が表示されます。

server: waiting for connection
server: connection received from localhost
server: Connection Successful
bytes read: 5
msg rcvd: ��w

クライアントから送信したのと同じバイトを確実に取得するにはどうすればよいですか?

4

3 に答える 3

1

何を印刷しようとしているのか正確にはわかりませんmsgType.toString()が、バイト配列の内容を印刷しないことはわかります。

これは、より意味のある方法でバイト配列を出力するメソッドへのリンクです。

于 2011-04-09T01:03:08.280 に答える
1

同じバイトを取得しています。それは、それらをどのように解釈するかの問題です。バイトを a として表示するString場合は、代わりにこれを使用します。

System.out.println("msg rcvd: " + new String(msgType, "UTF-8"));

ただし、扱っているバイトのエンコーディングが正しいことに注意してください (ここでは UTF-8 を想定しています)。あなたはすでにそうしているので、サーバー側とクライアント側でObjectOutputStreamそれを使用することができます。writeUTF()ObjectInputStream.readUTF()

于 2011-04-09T01:18:40.823 に答える
0

ObjectOutputStream片側で を使用する場合は、ObjectInputStream反対側で を使用する必要があります。

あなたの場合、単純な OutputStream (おそらくバッファリングされたもの) と.write()で十分.read()です。

ただし、印刷の場合はbyte[].toString()、を使用しないでArrays.toString()ください。フォーマットされた出力が必要な場合は使用してください。


編集:送信側で配列を書き込んでさえいないことがわかりました。したがって、実際には ObjectOutputStream ヘッダーのみを読み取っています。


コメントから:

私はサーバー側を処理していますが、バイト配列を送信すると言われました。そのバイト配列を受け取って印刷するにはどうすればよいですか? この場合のバイト配列は、テキスト/文字列のバイトです

これは、サーバーが ASCII、UTF-8、ISO-8859-1 などのエンコードでエンコードされた単純な文字列のようなものを送信しているように聞こえます。その場合、受信側で次のようなものを使用できます。

String encoding = "UTF-8";
BufferedReader in =
    new BufferedReader(new InputStreamReader(connection.getInputStream(),
                                             encoding));
String line;
while((line = in.readLine()) != null) {
    System.out.println(line);
}

もちろん、エンコーディングは送信側で実際に使われているエンコーディングと同じであることを確認してください。

対応する送信コードは次のようになります。

String encoding = "UTF-8";
Writer w =
    new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(),
                                              encoding));
w.write("Hello World!\n");
w.write("And another line.\n");
w.flush();
于 2011-04-09T01:17:08.413 に答える