※ ChatGPTを利用し、要約された質問です(原文:javaのUDP受信プログラムについて)
JavaのUDP受信プログラムで受信データの表示方法について
このQ&Aのポイント
JavaのUDP受信プログラムで受信データを正しく表示する方法について教えてください。
受信プログラムを使用してデータを受信しましたが、ASCIIコードに変換されてしまい、正しい値が表示されません。
バイナリ形式で受信データを表示する方法や、ASCIIコードへの変換を抑制する方法について教えてください。
UDPで数値データを受信してある処理をしようと考えております。
そこで↓のページで公開されている受信プログラムを使用してデータを受信しました。
http://news.mynavi.jp/column/java/052/index.html
import java.net.*;
public class UDPServer {
public static void main(String[] argv)
throws Exception {
// 5100番ポートを監視するUDPソケットを生成
DatagramSocket receiveSocket = new DatagramSocket(5100);
// 受け付けるデータバッファとUDPパケットを作成
byte receiveBuffer[] = new byte[1024];
DatagramPacket receivePacket =
new DatagramPacket(receiveBuffer, receiveBuffer.length);
while (true) {
// UDPパケットを受信
receiveSocket.receive(receivePacket);
// 受信したデータを標準出力へ出力
System.out.println
(new String(receivePacket.getData(),
0, receivePacket.getLength()));
}
}
}
別のプログラムから「50」という数値を送信し、上記のプログラムで受信すると、勝手にASCIIコードに変換されてしまっているようで、ASCIIコードの10進数の50にあたる「2」が出力されてしまいます。
これをASCIIコードに変換せずに、表示させる方法を教えて下さい。
もしくは、受信データをバイナリで表示する方法があれば、そちらも教えていただけるとありがたいです。
よろしくお願いします。
お礼
間違いに気づきました。 文字列に変換して「?」となってしまった物をbyteで表示させても「63」と出るのはあたりまえですね。 byte[] receive = receiveData.getBytes(); ではなく、 byte[] receive = receivePacket.getData(); とやってやると「255」を送信すると、「-128」が表示されました。 それについては http://www.creativegear.jp/2011/05/09/java_byte_to_int/ こちらのページで書かれていたByte型からInt型への変換方法で変換することができました。 この問題で何時間も悩んでいたのですが、解決できました。 ありがとうございました。
補足
ありがとうございます。 byte[] receive = receiveData.getBytes(); for( int i = 0; i < receive.length; ++i ){ System.out.println(Integer.toString(receive[i])); } これで「50」を受信したら「50」と表示させることができました。 しかし、「128」~「255」の数値を送り、 System.out.println(new String(receivePacket.getData(),0, receivePacket.getLength())); で表示させてやると、文字コードに対応する文字が無いためか、128~255の数値は全て「?」と表示されてしまいます。 128~255の数値を上記のfor文で変換してやると、「?」の文字コードにあたる「63」が出力されてしまいます。 128~255の数値を表示する方法はありますでしょうか? よろしくお願いします。