私は入力としてサーバ名、ポート、スレッド数、および要求するファイル名を入力するマルチスレッドサーバを作成しています。私の設計はソケットを作成することですmainを通してRunnableオブジェクト(ソケットとファイル名を取ります)を拡張します。また、5秒が過ぎると起動し、すべてのスレッドを閉じて終了するtimertaskを持っています。現在の設計はソケットを作成することですメインでは、それをrunnableに渡します(条件xにwhileループがあり、何度もファイルを要求しています)。タスクが起動すると、runnableのプライベート共有変数xがfalseに設定されます。javaのマルチスレッドサーバ..ファイルを扱うスレッド
私は、私のデザインに欠陥があると信じさせる多くの破損したパイプの問題に直面しています。何か不足していますか?同期/ロックされた変数を使用していません。すべてのファイル要求に対して新しいソケットを作成する必要がありますか?
スタックトレース:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
at java.io.DataOutputStream.writeBytes(DataOutputStream.java:259)
at FR.filesRecv(Client.java:62)
at FR.run(Client.java:79)
at java.lang.Thread.run(Thread.java:637)
サーバー側とクライアント側はちょっと混乱します。あなたの質問を編集してこれをもっと明確にすることはできますか? – Gray
また、どのような種類の「壊れたパイプの問題」がありますか。 stacktrace行の一部の例外は、あなたの質問の終わりに置くのには常に良いアイデアです。 – Gray
クライアントはサーバにバイトを書き込んでいますか?パイプが壊れている場合は、サーバーが接続を閉じたように見えます。 – Gray