• ベストアンサー

コンソール入力内容をエコーさせる

すぐに回答を! Javaを使い、コンソールで文字列を入力して それをエコーさせるというプログラムを作成しています。 私のつくったプログラムは以下の通りです。 ●クライアント側 import java.io.*; import java.net.*;  public class UMLClient {  public static void main(String[] args) throws IOException {   // 引数の数が正しいかどうかを調べる   if (args.length != 2)   throw new IllegalArgumentException("Parameter(s): <Server>   <Port>");   String command = null; // コマンド名   String server = args[0]; // サーバ名またはIPアドレス   // ポート番号が指定されていない場合は、ポート番号を7にする   int servPort = (args.length == 2) ? Integer.parseInt(args   [1]) : 7;   // データ入力の準備。入力されたバイト数が使えるようにバッフ  ァリングされた文字列ストリームを作成する   BufferedReader input = new BufferedReader (new         InputStreamReader(System.in), 1);   for (;;) {    System.out.print("送信するコマンドを入力してください>>");    System.out.flush(); // 強制出力    command = input.readLine(); // コマンド(文字列)の入力    // 正しいコマンドが入力されたかの確認    if (command == "put" ){     break;    }else if (command == "active"){     break;    }else if (command == "control"){     break;    }else if (command == "join"){     break;    }else if (command == "cut"){     break;    }else{     System.out.println("正しいコマンドを入力してください");    }   }   // サーバの指定されたポートに接続するソケットを作成する   Socket socket = new Socket(server, servPort);   System.out.println("Connected to server...sending echo     string");   // 入力されたコマンド(文字列)をバイトに変換する   byte[] byteBuffer = command.getBytes();   InputStream in = socket.getInputStream();   OutputStream out = socket.getOutputStream();   out.write(byteBuffer); // エンコードされた文字列をサーバに送  信する   // サーバから同じ文字列を受信する   int totalBytesRcvd = 0; // ここまでに受信した合計バイト数   int bytesRcvd; // 前回の読み込みで受信したバイト数   while (totalBytesRcvd < byteBuffer.length) {    if ((bytesRcvd = in.read(byteBuffer, totalBytesRcvd,      byteBuffer.length - totalBytesRcvd)) == -1)    throw new SocketException("Connection closed          prematurely");    totalBytesRcvd += bytesRcvd;   }   System.out.println("Received: " + new String(byteBuffer));   socket.close(); // ソケットとストリームをクローズする  } } ※サーバ側は文字列の関係で、書けませんが、 今回のエラーは明らかにクライアント側の問題だと考えています。 これを実行しても、添付ファイルのような結果です。 これを改善するためにはどこを修正すべきでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1さんのおっしゃるので正解だと思います。こういうことですよね? }else if (command == "cut"){ ではなく、 }else if (command.equals("cut")){ が正解だと。

santa1359
質問者

お礼

おっしゃる通りやってみたところ、 正しく動作することができました。 ありがとうございます。

その他の回答 (1)

回答No.1

自信なし。 「Stringは参照型なので演算子ではなくequalsメソッドを使わなければならないのに使ってない」のが原因な気がする。

santa1359
質問者

お礼

equalsメソッドを使用したところ、 正常に動作しました。ありがとうございました。

関連するQ&A