• ベストアンサー

TCP/IPソケットプログラミングJava編について

TCP/IPソケットプログラミングJava編という本を使って通信ネットワークの勉強をしています。 この本は一通り読んでプログラムの動作確認を行ったのですが、第4章の圧縮サーバのプログラムの動作確認が取れません。 圧縮サーバのプログラムは、本に乗っていなくて自作する必要があります。 どなたかこのプログラムを作成した方いらっしゃいませんか? いらしたらソースコードを教えていただきたいです。

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

これかな? よくは知らないけど。

参考URL:
http://cs.baylor.edu/~donahoo/practical/JavaSockets/textcode.html
debukawa
質問者

お礼

回答ありがとうございます。 探していただいたサイトには、圧縮サーバのコードが載っていませんでした。CompressProtocolFactory.javaを使って圧縮サーバを自作しなければいけないようです。(ちなみにサイトにはCompressProtocolFactory.javaを使わない圧縮サーバのコードは乗っていますが、CompressProtocolFactory.javaを使って起動させたいのです。) 圧縮サーバは、サイトにあるCompressClient.javaと通信して、圧縮ファイルを作成します。 CompressProtocolFactory.javaを使ったプログラムを自作しました。 クライアント側が未圧縮バイトを送信し、サーバはそれを圧縮します。 そのあとサーバが圧縮したバイトをクライアントに送信します。 ここまではうまくいくのですが、その後(クライアントが送信されたバイトを読み込み、ファイルに書き込む)ところから、うまく起動しません。起動しないというよりは、読み込みの前で動作が止まっているような感じです。 私の書いたソースがおかしいのだと思うのですが、自分ではどこがおかしいのか分かりません。 おかしい部分が分かれば教えていただけないでしょうか? 下は自作したソースコードです。 package socket_129; import java.net.*; // Socketに必要 import java.io.*; // IOException,[File]Input/OutputStreamに必要 public class CompressServer { public static void main(String[] args) throws IOException { if (args.length != 1) // 引数の数が正しいか調べる。 throw new IllegalArgumentException("Parameter(s): <Port>"); int port = Integer.parseInt(args[0]); // サーバポート ServerSocket servSock = new ServerSocket(port); // クライアントの接続要求を受け付けるサーバソケットを生成する。 Logger logger = new ConsoleLogger(); // ログメッセージをコンソールに出力する。 for(;;){ Socket clntSock = servSock.accept(); // ブロックして接続を待つ。 ProtocolFactory protoFactory = new CompressProtocolFactory(); // CompressProtocolFactory()インスタンスを生成する。 protoFactory.createProtocol(clntSock, logger); // createProtocol()メソッドを実行する。 } } }

debukawa
質問者

補足

この問題は、無事解決しました。 アドバイスありがとうございました。

関連するQ&A

  • 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」です。 たぶんほとんどわかってないので説明不足かもしれませんが、補足等いたしますのでわかる方いらっしゃいましたら教えてください。お願いします。

    • ベストアンサー
    • CGI
  • javaによるソケット通信

    こんばんわ. 現在悩んでいる事があります. あるプログラムと別のプログラム同士で通信を行い互いに影響を与えるようなプログラムは作成可能でしょうか. 例えば,一元的に全体を管理するコントローラがあり,コントローラからの命令で別のプログラムが動作する,コントローラはそのプログラムが動作中であることを知ることができる,といったプログラムを作成したいと思っています. これらを別のプロセス(hello.javaとworld.javaのように)で行いたいと考えています. こういったことはjavaによるソケット通信で行えるのでしょうか. 行えるのならどのように行えばいいのでしょうか?私の考えでは.ソケット通信でやるなら,コントローラがクライアントでその下に位置するプログラムがサーバということになると思いますが・・いまいちよくわかりません. ご存知の方がおられましたらご教授お願いいたします.

  • TCP通信

    OS:Win2000、VisualBasic.netで開発しています。 現在TCP通信のプログラムを製造しています。 TCPサーバとTCPクライアントのテストアプリケーションを作成し、接続テストを行っているのですが、 サーバとクライアントの接続、データ送受信の確認はできました。 しかし、一度クライアント側から接続を切断(ソケットを消去)し、 再びソケットを生成してコネクト要求を出しても接続が確立できません。 このときサーバ側はなにも操作していません。 終始接続待機状態にしてあります。 ソースがないと分かりにくいかもしれませんが、 何か思い当たることがある方、アドバイスよろしくお願いします。

  • ネットワークプログラミングを勉強しようとしているのですが。

    プログラミング初心者です。 C言語でWindowsプログラミングを一応学び、それを利用してゲームを作るのと平行してネットワークも勉強しようと思っています。 使おうとしている書籍は"UNIXネットワークプログラミング入門"という書籍で、初めてネットワークプログラミングを勉強しようとしています。 そこでその本の第二章(p32)のチャットプログラムを動作させようとしたのですがうまくできません。ソースコードはhttp://www.gihyo.co.jp/books/support.php/4-7741-1754-4 に置いてあるフォルダのchap2というフォルダにあるコードです。 まずcygwinでサーバのプログラムを動作させてから、cygwinをもう一つ起動させてそちらでクライアントのプログラムを動作させればいいと書いてあると「思う」のですが、動作しません。クライアントのプログラムを動作させても「gethostbyname: Operation not permitted」というメッセージが出て終了してしまいます。 もし、同じ本を使ったことがある方、またはそうでなくても超初心者がしてしまうような間違いや手順足らずなことなどに心当たりがあれば教えて下さい。

  • ネットワークプログラミングを勉強しようとしているのですが。

    プログラミング初心者です。 C言語でWindowsプログラミングを一応学び、それを利用してゲームを作るのと平行してネットワークも勉強しようと思っています。 使おうとしている書籍は"UNIXネットワークプログラミング入門"という書籍で、初めてネットワークプログラミングを勉強しようとしています。 そこでその本の第二章(p32)のチャットプログラムを動作させようとしたのですがうまくできません。ソースコードは​http://www.gihyo.co.jp/books/support.php/4-7741-1754-4​ に置いてあるフォルダのchap2というフォルダにあるコードです。 まずcygwinでサーバのプログラムを動作させてから、cygwinをもう一つ起動させてそちらでクライアントのプログラムを動作させればいいと書いてあると「思う」のですが、動作しません。クライアントのプログラムを動作させても「gethostbyname: Operation not permitted」というメッセージが出て終了してしまいます。 もし、同じ本を使ったことがある方、またはそうでなくても超初心者がしてしまうような間違いや手順足らずなことなどに心当たりがあれば教えて下さい。

  • NetBeansでのJavaプログラミングについて

    今NetBeansで本を見ながらJavaプログラミングの勉強をしているのですが、本のパッケージとクラスパスの章をやっているのですが自作のパッケージをインポートするときいちいちクラスファイルを持ってきてコンパイルしているのでものすごく不便です。本にはドットを使ってクラスパスに指定されたディレクトリの中のフォルダに入っているクラスファイルにアクセスできるとあったのですがNetBeansのクラスパスの設定の仕方もわからずかなり困っています。NetBeansの使い方を調べたりもするのですがどのサイトもいまいちわかりずらいのでどなたかご教授お願いします。

  • TCP/IP通信でのコネクションロスト(ソケットエラー)の検知について

    インターネット上での対戦ゲームの作成を行なっているところです。 サーバーを挟んでクライアント間で双方向の通信を行なっています。  A → サーバー → B  A ← サーバー ← B TCP/IPは信頼性の高い通信方法ということで、データ抜けなどは 心配しなくても良いと聞いています。 もし、データ抜けなどが発生した場合はコネクションロストの状態になると。 実際のプログラミングではソケットを使用しています。 コネクションロストが起きると、ソケットエラーかソケットクローズで検知できます。 実際に例えばクライアントAを強制終了させるとサーバーはただちに ソケットクローズを検知します。 ここで、問題はデータを送っても届かないのに、 ソケットエラーもソケットクローズも起きない状態が発生することです。 これはインターネットの経路上になにか問題が発生したと考えていますが このような状態はタイムアウトなどで監視する以外に検知する方法はないのでしょうか? クライアントはウィンドウズでVB6.0のwinsockを、 サーバーはLinuxを使用しています。 なにかアドバイスをいただければありがたいです。

  • 異なる言語間でのソケット通信について

    簡単なネットワークプログラムを作成して、ソケット通信の確認をしています。 クライアントとサーバが両方ともにC++の場合と、両方ともにJavaの場合で、正常に通信が行われていることは確認しました。 そこで、クライアントでC++のプログラムを動かし、サーバでJavaのプログラムを動かしてみたのですが、うまくいきませんでした。 (ポート番号を合わせたので、相互接続は出来てるみたいですが、データが渡ってきませんでした。OSはクライアント/サーバともに、Windowsです。) 言語が異なる場合の、ソケット通信について良いサイトをご存知でしたら、教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • ソケットプログラミングとスレッドについて

    TCP/IPソケットを用いた通信プログラムを作成しています。その上でacceptする処理を専用スレッドにしており、accept後の受信処理をまた別のスレッドで処理しています。コンソールプログラムにおいてサーバとクライアントを用意しテストをしてみるとうまくいくのですが、MFCプログラムにおいて同じネットワーク処理を行ってみると、サーバ側へのconnectは成功するのですが、クライアント側からsendしたときにサーバ側でrecvの戻り値が必ず0にしかならず切断された状態になってしまいます。これはどういったときに発生すると考えられるでしょうか?ちなみにMFCが絡んでいるかどうかということは特にわかっておりません。 どなたかこのような経験をお持ちであればご教授お願い致します。

  • プログラミングに関して

    プログラミングの勉強をしているのですが、一通り基礎的な本は読破しましたが、長いソースプログラムを白紙の状態から自分で書くことなど出来そうにありません。オープンソースなどの長いソースコードは全て誰かが白紙の状態からあれ程までの長いソースコードを書いているのでしょうか?それとも何かを応用したりどこかの関数を引用したりして書かれているのでしょうか?