- ベストアンサー
エコーサーバ
javaで自分の指定した文字列をサーバに一旦送ってその文字列をそのまま返すということをしたいのでが、 ソケットプログラムの教科書に載っているサーバのアドレスは架空のものらしく実行するとエラーになります。 実際に返してくれるサーバってあるんでしょうか?? それとも自分でサーバを作ったりしなきゃ出来ないことなのでしょうか??
- bonorebihu
- お礼率21% (21/97)
- Java
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一般的にソケットプログラミングの場合、サーバに接続するためのクライアントプログラムと、クライアントからの接続を受け付けるサーバプログラムの2つが必要です。これをJavaでは、クライアント側はSocketクラスのインスタンスを生成し、サーバ側ではServerSocketクラスのインスタンスを生成することで実現しています。 質問者さんの場合、クライアントの方は以下の過去ログにあるものでほぼ出来上がっていますので、残りはサーバの方だけですね。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1806000 あと、余談ですが、単にソケット通信やHTTP通信によるプログラミングの勉強程度では、ネットワークプログラミングといえども、PCは1台だけでも可能です。そのかわり、サーバ側の設定においては、ホスト名は自分自身を表す「localhost」を、IPアドレスはループバックアドレス「127.0.0.1」を、ポート番号は「1024~65535」までの任意の番号1つを、それぞれ使用するようにして下さい。
その他の回答 (1)
- rinkun
- ベストアンサー率44% (706/1571)
普通は自作でしょう。 同じ教科書にエコーサーバの作り方が載ってませんか? 簡易のサーバならJavaで書くのは難しくないですよ。
関連するQ&A
- コンソール入力内容をエコーさせる
すぐに回答を! 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(); // ソケットとストリームをクローズする } } ※サーバ側は文字列の関係で、書けませんが、 今回のエラーは明らかにクライアント側の問題だと考えています。 これを実行しても、添付ファイルのような結果です。 これを改善するためにはどこを修正すべきでしょうか。 よろしくお願いします。
- ベストアンサー
- Java
- サーバへキーボードからの入力を送る
以下のプログラムはネットワーク経由でサーバへキーボードからの入力を送り、サーバからのデータを画面に出力するプログラムなのですが、コンパイル後、 java Wrnet DNS名 ポート番号 と実行しろと本に書いてあるのですが、エラーが表示されます。分かる方いらっしゃいませんでしょうか? そもそもこのプログラム1つでできるものなのでしょうか??ポート番号を指定する記述がこのプログラムにないと思うのですが…
- ベストアンサー
- Java
- JavaのSocketで、データを送ったのに応答が
JavaのSocketで、データを送ったのに応答がありません。 iPod touchで、データを送ったらオウム返しのように送られてきたデータをそのまま返すプログラムを実行しました。 パソコンのJavaでソケット通信を行い、接続とウェルカム文は表示できました。 しかし、データを送ったのに帰ってきません。 おかしいので、telnetで確認したところ、うまく作動しました。 となると、telnetではうまくいき、javaのソケットではうまくいかない…javaが原因と思います。 telnetとjavaのソケットとでは、何か違いがありますか? javaでは、入力された文字列をそのまま送信しています。エンコードや何かが必要ですか?
- ベストアンサー
- Java
- socketプログラミングについて
C++でsocketの練習のためにソケットを開き、文字列の送信を行うだけのサーバクライアントプログラムを作成したのですが、どうも上手く動作してくれません。 クライアント→サーバへ文字列を送信する前に、 1.サーバがソケットを開き、9999ポートでアクセスを待つ 2.クライアントがソケットを作成し、サーバの9999ポートにアクセスする 3.クライアントが文字列をサーバへ送信し、サーバが文字列を表示 ということをしたいのですが、2の部分でつまずいています。 プログラムをネットワークに接続されているコンピュータ上で実行すると動作するのですが、(client 192.168.15.17 9999)単独でサーバ・クライアントを起動させ、localhost当てに接続(client localhost 9999)しようとしても「No route to host」と表示されて、接続すら出来ません。 ためしにサーバを起動させている状態で「telnet localhost 9999」とするとどうやらサーバに接続されているようです。 localhostでやる場合は特別なソケット操作が必要になるのでしょうか?
- ベストアンサー
- C・C++・C#
- HTTP serverのサンプル
ソケットを使った簡単はHTTP serverを作りたいのですが、ブラウザでLocalhostで指定したら、Helloとだけ返す簡単なHttp serverのサンプルプログラムを教えて頂けないでしょうか。 ソケットの部分は出来ていますが、HTTPの部分が分かりません。 よろしくお願いします。
- 締切済み
- Java
- ソケット通信
現在プロセス間通信について学んでおり、 今はソケットを使ったプロセス間通信のプログラムを書いています。 そのソケット通信での質問なのですが、 2台のパソコンでINETドメインのソケットを使って プログラムを書いているのですが、 サーバーを実行した後、 別のパソコンでサーバー側のパソコンのIPアドレスを指定して クライアントを実行しようとすると、 connect:Connection timedout と表示されて実行できません。 同じプログラムをUNIXドメインで 1台のパソコンで実行すると正しく実行できます。 これは、プログラムに問題があるのでしょうか? それとも、ソケット通信を行う際には 何かパソコン等の設定が必要なのでしょうか? 教えてください。お願いします。 あと、セマフォを用いたプロセス間通信のサンプルプログラムが のっているホームページなどご存知でしたら、 教えていただけるとありがたいです。
- ベストアンサー
- C・C++・C#
- レンタルサーバーであるプログラムを常に走らせておく
PHPやperlなどが使えるレンタルサーバーで以下のような処理をさせたいのですができますか 1 指定のTwitterアカウントに新しいツィートが投稿されるのを察知 2 そのツィートに含まれる文字列を処理して結果を別のTwitterアカウントでツィートする 1を実現するにはツィートをモニターするプログラムをサーバー側で常に走らせている必要があると思います。htdocフォルダに1を実行するPHPファイルを入れてもクライエントがサーバーにアクセスして処理を頼まない限りサーバー側では何もしてくれませんよね? クライエントの要求なしで常にサーバー側であるプログラムを実行させておくにはどうしたらいいのでしょうか?
- ベストアンサー
- その他([技術者向] コンピューター)
- C#のメール送信でエラーが出るのですが・・・・
こんにちは最近、自分の担当のプログラムを作っているところなんですが、どうしてもエラーがでて直りません。 それがデバッグ中にでるものではなく動作中に起こるので困っています。 作っているプログラムはメールの送信のみを行うプログラムでC#でコーディングしています。 ちなみにエラー内容はメール送信時に「指定された文字列は、電子メールアドレスに必要な形式ではありません。」 一応、アドレス、SMTPサーバのアドレスともに確認しましたが、こちらは問題ありませんでした。 また個人的に検索してみたり人に聞いてみましたが、解決しませんでした。 どなたかご教授お願いします。
- 締切済み
- C・C++・C#
- TCPサーバ bind関数のエラーについて
簡易TCPサーバをC言語で構築しています。 サーバ側のプログラムを実行し、クライアントから要求があった(GET / HTTP/1.0)場合に文字列をクライアント側に送信します。テスト一回目は要求通りの機能を果たし無事に終了できました。しかし、1回目と同じように2回目も実行すると、bind()関数でエラーが出ます。自分では一回目の接続で使ったポートが使用され続けてしまっているので、2回目の接続が前の接続に阻まれている(?)のが原因では無いかと思うのですが、これは何が原因なのでしょうか。いくら考えても分かりません。教えて下さい。
- ベストアンサー
- C・C++・C#