2つのスレッドがあります。1つは読み取り用、もう1つは同じソケットを介したデータの書き込み用です。接続に問題がある場合、2つのスレッドが例外をキャッチして再接続を試みます。これを行うには、同じメソッドを呼び出します。
public synchronized void close_connection() {
try {
socket.shutdownInput();
socket.shutdownOutput();
socket.close();
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
そしてそれの後に接続を確立しようとする2番目のもの:
public synchronized boolean connect() {
boolean result=true;
socket = new Socket();
try {
socket.connect(new InetSocketAddress(address, port), 500);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
} catch (IOException e) {
result=false;
}
return result;
}
問題は、2つのスレッドから1つずつサーバーにすぐに接続しようとしないようにする方法です(接続エラーの後-たとえば、サーバーによる接続を閉じた後)。つまり、1つのスレッドが接続を試みた場合、2番目のスレッドはこれを認識し、同じことを試みないで、最初のスレッドによる接続の確立を待ちます(永続的なファイトスレッドの問題を回避するために、切断、接続、切断、接続...) 。同期を試しましたが、経験が少なすぎます。よろしく、Artik