エラーや例外がスローされた場合でも、ソケット サーバーを開いたままにしたい
これが私のサーバーです
編集:
public void serveur()
{
int maxConnectionAllowed=2;
int port=5000;
try{
serveur = new ServerSocket(port);
serveur.setReuseAddress(true);
System.out.println("Waiting for connection");
while (true) {
synchronized (connectedCount) {
while (connectedCount.get() >= maxConnectionAllowed) {
try {
connectedCount.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Socket socket = serveur.accept();
factory.processRequest(socket,connectedCount);
}
}
catch(SocketException sException){
System.err.println("Error when a socket connects");
}
catch(IOException ioException){
System.err.println("Error when reading output/input datas");
}
}
public void run() {
serveur();
}
たとえば、maxConnection の同時許容数は 2 ですが、3 番目に接続すると、例外がスローjava.net.ConnectException: Connection refused: connect
され、serversocket が閉じられます。場所が利用可能になるまでサーバーを実行し続けたいとします。
編集:
ファクトリーメソッド
public void processRequest(Socket socket,AtomicInteger connectedCount) {
try
{
RequestTreatment requestTreatment= new RequestTreatment(socket,connectedCount);
Thread threadWorker= new Thread(requestTreatment);
threadWorker.start();
}
finally
{
compteurConnexion.incrementAndGet();
synchronized (connectedCount) {
connectedCount.notify();
}
}
}
}
治療クラスのリクエスト
public RequestTreatment(Socket socket) {
super();
this.socket=socket;
}
@Override
public void run() {
try
{
requestTreatment();
}
finally
{
try {
socket.getInputStream().close();
socket.getOutputStream().close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void treatment() {
try {
in = socket.getInputStream();
out = socket.getOutputStream();
// do stuff
} catch (IOException e) {
e.printStackTrace();
}
}
}
どうもありがとうございました