• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:圧縮クライアントのプログラム)

圧縮クライアントのプログラム

このQ&Aのポイント
  • java eclipseを使って通信のプログラムを勉強しています。TCP/IPソケットプログラミングjava編のソースコードを参考にしています。
  • プログラムを実行すると「test.txt (No such file or directory)」というエラーが出る問題に遭遇しました。テキストファイルがプログラムのフォルダに存在しないようです。
  • プログラムの引数は、<Server> IPアドレス、<Port> 110、<File> test.txtです。エラーを解消する方法について教えていただけませんか?

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

> Exception in thread "main" java.io.FileNotFoundException: test.txt (No such file or directory) このエラーに対処するには,ファイルが見つからないということですから > このプログラムが入っているフォルダの中にtest.txtというテキストファイルを作成して同じフォルダに入れてあります。 このファイルの置き場所を変えるだけです。普通はProjectのルートフォルダに入れるでしょう。

debukawa
質問者

お礼

f272さん、回答ありがとうございます。 Projectのルートフォルダにtest.txtを入れたら、 > Exception in thread "main" java.io.FileNotFoundException: test.txt (No such file or directory) を取り除くことができました。ありがとうございます。 次はこのようなエラーが生じました。 Exception in thread "main" java.net.ConnectException: Connection timed out: connect 該当行は、この部分です。 Socket sock = new Socket(server, port); このエラーは接続時にエラーが生じたという意味ですよね。 このクライアント側のプログラムは本に書かれていたものなので、 問題ないと思うのですが… もしかすると、私が作ったサーバ側に問題があるのでしょうか? そのプログラムを載せますので、アドバイスをいただきたいです。 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(); // ログメッセージをコンソールに出力する。 Socket clntSock = servSock.accept(); // ブロックして接続を待つ。 ProtocolFactory protoFactory = new CompressProtocolFactory(); // CompressProtocolFactory()インスタンスを生成する。 protoFactory.createProtocol(clntSock, logger); // createProtocol()メソッドを実行する。 } }

その他の回答 (1)

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.2

> Exception in thread "main" java.net.ConnectException: Connection timed out: connect 接続を確立しようとしたけど,できないまま時間がたったのであきらめた,ということ。 サーバ側の問題です。 このクライアントプログラムを実行させたときに,サーバが接続を待っている状態でないと当然サーバは何もしません。そうするとそのうちにクライアントはタイムアウトします。と言う事で クライアントプログラムを実行する前に,サーバプログラムを実行して待たせておく その状態でクライアントプログラムを実行する

debukawa
質問者

お礼

回答ありがとうございます。 サーバを実行してから、クライアントを実行しました。 すると、次のようにコンソール画面に表示されました。 WException in thread "main" java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at socket_127.CompressClient.main(CompressClient.java:34) 34行目はこの部分です。 while ((bytesRead = sockIn.read(buffer)) != -1) { 1つWが表示されたということは、送信するバイトが1つソケット出力ストリームに 書き込まれたことになるのですが、どうしてあとが続かないのでしょうか?

debukawa
質問者

補足

すいません。無事問題を解決できました。 アドバイスありがとうございました。

関連するQ&A