サーバーとクライアントの間でテキストを転送するためのGUIを備えたサーバーとクライアントを作成しましたが、うまく機能します。Google で「ネットワーク経由でファイルを送信する方法」を検索したところ、この美しい解決策が見つかりました (Andrey Kozhanov の返信を参照)。リンク内のサーバークラスをサーバーパッケージに移動し、リンク内のクライアントクラスをクライアントパッケージに移動して試してみましたが、うまく機能しました。これで、インスタント テキスト メッセージとインスタント ファイルを送信できるようになりました。
ユーザーの期待に応えるために、コミュニケーションをスムーズに機能させるために必要なことをすべて書きました。
問題は特定のシナリオで発生する問題です。
2 つのサーバーのポート番号は異なります。(テキスト用の鉱山とファイル用のリンクの 1 つ)
ステージ 1
1-クライアントはサーバーにファイルの送信を要求します。2- サーバーは ( Yes )
で応答します( dialog yes-no-options )。
3- クライアントはファイル チューザーのリストをナビゲートします。
4- クライアントはファイル チューザーをキャンセルします (ファイルを送信しませんでした)。
5-サーバーはクライアントのキャンセルについて通知しました。ステージ 2
-再び
1 - クライアントがサーバーにファイルの送信を要求します。2- サーバーは ( Yes )
で応答します。 サーバー側でエラーが発生しました。
エラーの最初の行は次のとおりです。
java.net.BindException: アドレスはすでに使用されています: JVM_Bind
このようにサーバーパッケージで受信スレッドを開始します
recieverThread = new Recieving();
recieverThread.setDaemon(true);
recieverThread.start();
問題はステージ 1の番号 5 (5 - サーバーがクライアントのキャンセルについて通知した)にまでさかのぼります。クライアントからファイルを受信するためのサーバー スレッドが開始されるため、ポイント 5 でそれを停止する必要があります。このスレッドを停止するには、次の組み合わせを使用します
recieverThread.interrupt();
recieverThread = null;
しかし、ステージ 2で再び開始すると、まだ実行中であり、停止していないようです。新しいスレッドを開始したいときにエラーが発生しないように、それを強制終了したい。