- ベストアンサー
コンソール入力内容をエコーさせる
すぐに回答を! 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(); // ソケットとストリームをクローズする } } ※サーバ側は文字列の関係で、書けませんが、 今回のエラーは明らかにクライアント側の問題だと考えています。 これを実行しても、添付ファイルのような結果です。 これを改善するためにはどこを修正すべきでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1さんのおっしゃるので正解だと思います。こういうことですよね? }else if (command == "cut"){ ではなく、 }else if (command.equals("cut")){ が正解だと。
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
自信なし。 「Stringは参照型なので演算子ではなくequalsメソッドを使わなければならないのに使ってない」のが原因な気がする。
お礼
equalsメソッドを使用したところ、 正常に動作しました。ありがとうございました。
お礼
おっしゃる通りやってみたところ、 正しく動作することができました。 ありがとうございます。