TCP/IPソケットプログラミングでわからない点とは?

このQ&Aのポイント
  • 現在勉強中のTCP/IPソケットプログラミング(Java)について、理解が不足している状態です。
  • 質問のソースコードに「<Server><Word><Port>」という部分がありますが、どのような入力が必要なのかがわかりません。
  • TCPEchoClient.javaというファイル名のソースコードを実行していますが、詳しい説明が不足しているため、理解に困っています。質問の回答をお願いします。
回答を見る
  • ベストアンサー

TCP/IPソケットプログラミング(Java)

質問タイトルの本で現在勉強しています。これです↓ ttp://www.amazon.co.jp/gp/product/4274065200/sr=8-1/qid=1155770817/ref=sr_1_1/250-2063233-2541813?ie=UTF8&s=gateway しかし、TCP、IPなどはあんまりわかっていない状態です。 とりあえず書いてあるソースを打ち込んで実行してみようというやり方でやっているのですが、とあるソースの中で throw new IllegalArgumentException("Parameter(s):<Server><Word>[<Port>]"); とあるのですが、<Server><Word><Port>の部分にはなにを入力したらいいのでしょうか? ちなみにファイル名は「TCPEchoClient.java」です。 たぶんほとんどわかってないので説明不足かもしれませんが、補足等いたしますのでわかる方いらっしゃいましたら教えてください。お願いします。

noname#24851
noname#24851
  • CGI
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • mssine
  • ベストアンサー率24% (38/156)
回答No.4

コピペしたら、ヘンなのが追加されてしまいましたね。。。 #2のプログラムは、第2引数が0以下ならIllegalArgumentExceptionを発生させるサンプルプログラムなので、 java q2344225 192.168.0.1 -3 とかで実行すると Exception in thread "main" java.lang.IllegalArgumentException: 192.168.0.1へのport番号(-3)が不正です at q2344225.main(q2344225.java:6) となるのが正常です。

noname#24851
質問者

お礼

何度もありがとうございます。 何度やってもエラーが出てしまいます・・・。 このままだと放置することになってしまうのでとりあえず締め切らせていただきます。 何度もありがとうございました。

その他の回答 (3)

  • mssine
  • ベストアンサー率24% (38/156)
回答No.3

#2のプログラムは、第2引数が0以下ならIllegalArgumentExceptionを発生させるサンプルプログラムなので、 java q2344225 www.hoge.jp -3 とかで実行すると Exception in thread "main" java.lang.IllegalArgumentException: www.hoge.jpへのport番号(-3)が不正です at q2344225.main(q2344225.java:6) となるのが正常です。

  • mssine
  • ベストアンサー率24% (38/156)
回答No.2

class q2344225 {  static public void main(String args[]) {   String host=args[0];   int port = Integer.parseInt(args[1]);   if (port<=0) {    throw new IllegalArgumentException(host + "へのport番号(" + port +")が不正です");   }  } }

noname#24851
質問者

補足

コンパイルはできるのですが Exception in thread "main" java.lang.IllegalArgumentException: というエラーが出てしまいうまく実行できません。なにが原因なのでしょうか?

  • mssine
  • ベストアンサー率24% (38/156)
回答No.1

IllegalArgumentExceptionクラスの引数はStringですので、 <Server><Word><Port> の部分は貴方が決めた、文字列を指定すればよいです。 (要は何でも良い)

noname#24851
質問者

補足

具体的にどんな感じになるか例を書いてみてくれませんか?

関連するQ&A

  • TCPプログラミング

    以下のプログラムをコンパイルして実行したら Exception in thread "main" java.lang.IllegalArgumentException: Paraneter(s):<Server> <Word> [<Port>] at TCPEchoClient.main(TCPEchoClient.java:9) というメッセージが表示されました。 このメッセージの意味が全く分かりません。 分かる方がいらっしゃいましたら教えてください。 お願いします。 本来なら Received:****(←****は自分が指定した文字列) となるはずなんですが… このプログラムはTCPを使ってエコーサーバと通信するクライアントです。 import java.net.*; import java.io.*; public class TCPEchoClient{ public static void main(String[] args)throws IOException{ if((args.length < 2)||(args.length > 3)) throw new IllegalArgumentException("Parameter(s):<Server><Word>[<Port>]"); String server = args[0]; byte[] byteBuffer = args[1].getBytes(); int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7; Socket socket = new Socket(server,servPort); System.out.println("Connected to server...sending echo string"); 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(); } }

  • TCPプログラミング

    次のコードを入力したのですが、コンパイルできません。 エラーについても良く分かりません。 import java.net.*; import java.io.*; public class TCPEchoClient{ public static void main(String[] args)throws IOException{ if((args.length < 2)||(args.length > 3)) throw new IllegalArgumentException("Parameter(s):<Server><Word>[<Port>]"); String server = args[0]; byte[] byteBuffer = args[1].getBytes(); int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7; Socket socket = new Socket(server,servPort); System.out.println("Connected to server...sending echo string"); 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(); } } これについて、 if(bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd) == -1) この行にエラーがあるらしいです。 どう解決していいのか分かりません。 どなたか説明してもらえませんか。

    • ベストアンサー
    • Java
  • TCPのプログラムで例外エラーが出て困っています

    java eclipeを使って通信のプログラムを作ろうとしています。 参考にしている本は、TCP/IPソケットプログラミングjava編です。 本に書かれてるソースコードのとおりに入力したら、 Exception in thread "main" java.lang.IllegalArgumentException: Parameter(s): <Server> <word> [<Port>] at socket_33.TCPEchoClient.main(TCPEchoClient.java:15) というエラーが出ました。 このエラーを調べると、 「不正な引数、または不適切な引数をメソッドにわたしたことを示すためにスローされる」とかかれていました。 また、 <Server> <word> [<Port>] に何か文字を入力すればよいとも書かれていました。 具体的には、何を入力すればよいのでしょうか? 他のページを見て試してみても、例外エラーがとれません。 下にソースコードを載せますので、おかしな部分がありましたら、 そちらのご指導もお願いします。 package socket_33; import java.net.*; // Socketに必要 import java.io.*; // IOException,Input/OutputStreamに必要 public class TCPEchoClient { /** * @param args */ public static void main(String[] args) throws IOException { if ((args.length < 2) || (args.length > 3)) // 引数の数が正しいかどうかを調べる throw new IllegalArgumentException("Parameter(s): <Server> <word> [<Port>]"); String server = args[0]; // サーバ名またはIPアドレス // デフォルトの文字エンコード方式を使って入力Stringをバイトに変換する byte[] byteBuffer = args[1].getBytes(); int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7; // サーバの指定されたポートに接続するソケットを作成する Socket socket = new Socket(server, servPort); System.out.println("Connected to server...sending echo string"); 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 prenmaturely"); totalBytesRcvd += bytesRcvd; } System.out.println("Received: " + new String(byteBuffer)); socket.close(); // ソケットとストリームをクローズする } }

  • 上戸彩ベストアルバムの特典

    http://www.amazon.co.jp/gp/product/B000H7I3X2/sr=8-2/qid=1155210838/ref=sr_1_2/503-0347168-0130336?ie=UTF8&s=gateway についてくるビームスとのコラボ商品(ウォレットチェーン)の写真がみたいのですが、なかなかみつかりません(>_<) 白と黒があるようなので、予約するときの参考にしたいのですが…

  • バイオハザード初心者です。

    僕はバイオハザード4しかやったことありません。 4がとても面白かったので他のシリーズもやってみたいと思うのですが、 やはりバイオハザード初心者はきちんと 一番最初に発売されたバイオハザード1 (http://www.amazon.co.jp/gp/product/images/B000069TCP/sr=1-30/qid=1237706226/ref=dp_image_0?ie=UTF8&n=637394&s=videogames&qid=1237706226&sr=1-30) をやるべきですか? アマゾンで見ると1より2の方が安いので迷っています。 回答よろしくお願いします。

  • 手帳の販売数ってどのくらい?

    ほぼ日刊イトイ新聞というところで販売されている、ほぼ日手帳というものがかなり売れていると聞きました。 http://www.amazon.co.jp/gp/product/4344010639/sr=8-4/qid=1158835606/ref=sr_1_4/503-9089926-8883910?ie=UTF8&s=gateway ということで、疑問に思ったのが、日本全国で手帳というものはいったいどのくらい売れているのかということです。正確に、どのくらいの冊数が売れているか知る方法はないでしょうか? もしそれがわかれば、いったいどのくらいほぼ日手帳が人気があるのかわかるのではないかと思ったからです。 どなたかそのような知識がある方がいらっしゃれば是非教えていただきたいです。よろしくお願いいたします。

  • 今回自作パソコンを作ろうと思った

    のですが、自分では調べて見たものの、規格があっているかなどの、ことがあまりわからないので、アドバイスを頂けたらと思って質問させていただきました。 用途はFFやBF•AVAなどのFPSなどができればと思っています。 本題なのですが、自分で選んで見たものがこちらです。 メモリ http://www.amazon.co.jp/gp/aw/d/B009M0TCHQ/ref=mp_s_a_1_1?qid=1402829212&sr=8-1&pi=SX200_QL40 グラボ NVIDIA geforce GTX 780ti () マザーボード http://www.amazon.co.jp/gp/aw/d/B00CYA5E8M/ref=mp_s_a_1_6?qid=1402829490&sr=8-6&pi=AC_SX110_SY165_QL70 pcケース http://www.amazon.co.jp/gp/aw/d/B00EZGBUL8/ref=mp_s_a_1_1?qid=1402828997&sr=8-1&pi=SX200_QL40 SSD http://www.amazon.co.jp/gp/aw/d/B009SIJ7G8/ref=mp_s_a_1_1?qid=1402829126&sr=8-1&pi=SX200_QL40 HDD http://www.amazon.co.jp/gp/aw/d/B009D9SJ7U/ref=mp_s_a_1_6?qid=1402829562&sr=8-6 CPU http://www.amazon.co.jp/gp/aw/d/B00CO8TBQ0/ref=mp_s_a_1_1?qid=1402829661&sr=8-1&pi=SY200_QL40 電源 http://www.amazon.co.jp/gp/aw/d/B00ICCQRYQ/ref=mp_s_a_1_5?qid=1402829707&sr=8-5&pi=AC_SX110_SY165_QL70 OS http://www.amazon.co.jp/gp/aw/d/B00HSC9E78/ref=mp_s_a_1_2?qid=1402829894&sr=8-2&pi=SY200_QL40 です。 Amazonが分かり易いと思ったのでAmazonから持ってきました。(geforce780tiがAmazonになかったので、名前だけ💧) iPhoneで質問させていただいたのでミスがあるかもしれないですけれど、ご了承下さいm(_ _)m この部品なら、こっちの方がいい とか この部品は規格外等教えていただけたら幸いです。 是非アドバイスお願い致します。

  • SATAケーブルについて

    使用しているPC ゲートウェイ712JP ttp://www.tsukumo.co.jp/gateway/712jp.html SATAケーブルを購入する時結構種類があり どれを買っても大丈夫なんでしょうか? 一応購入予定が http://www.amazon.co.jp/サンワサプライ-L型シリアルATA2ケーブル-TK-SATA-05LLA/dp/B000JCERC6/ref=sr_1_3?ie=UTF8&s=electronics&qid=1236244033&sr=8-3 http://www.amazon.co.jp/サンワサプライ-TK-SATA-02BL-SANWA-SUPPLY-シリアルATAケーブル/dp/B000AS2Y6A/ref=sr_1_1?ie=UTF8&s=electronics&qid=1236244033&sr=8-1 どちらか購入しようと思っています。

  • That's(太陽誘電)のDVD-Rについて困ってることがあります。

    That's(太陽誘電)のDVD-Rについて困ってることがあります。 http://www.amazon.co.jp/gp/aw/d.html/ref=mp_s_a_57/376-6671735-2008657?uid=NULLGWDOCOMO&qid=1271180412&a=B000FUB2CK&sr=1-57とhttp://www.amazon.co.jp/gp/aw/d.html/ref=mp_s_a_14/376-6671735-2008657?uid=NULLGWDOCOMO&qid=1271180287&a=B000AD7MSA&sr=1-14の違いはなんですか?また品質などは変わってくるのでしょうか?

  • この画像と同じような画像を作りたい

    http://www.amazon.co.jp/gp/product/images/B000WME02U/sr=1-1/qid=1197529610/ref=dp_image_text_0?ie=UTF8&n=561956&s=music&qid=1197529610&sr=1-1 ↑の画像と同じような画像を作りたいんですが、具体的にどうすれば良いでしょうか? 無料のソフトなんかを教えて頂けると嬉しいです。