Mit Threads mehrere SSLSockets und Sockets abfragen

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

ich habe bereits eine LoginServer-Klasse implementiert, der auf einem bestimmten Port X horcht und werkelt - soweit so gut. Request kommt auf dem Port, wird verarbeitet - wunderbar.

So, nun möchte ich jedoch das ganze mit SSL ausweiten und zwar so, dass noch immer Port X (nicht SSL) funktioniert.

Ich denke ich brauche pro Port einen eigenen Thread, nicht?

Natürlich könnte ich die LoginServer und LoginServerSSL erstellen - ABER: LoginServer hat mehrere Methoden, die dann identisch wären - ned schön! Soll dafür eine abstrakte Klasse machen mit den ident. Methoden?

Oder soll ich mehrere Ports durch:

Code:
Thread t1 = new Thread() {
   public void run() {
   ...
   socket = serversocket.accept();
   ...
   }
};

Thread t2 = new Thread() {
   public void run() {
   ...
   sslsocket = sslserversocket.accept();
   ...
   }
};
Oder ganz anders? Wie Implementiere ich also das abhorchen mehrerer Ports, wenn es sich einerseits um SSLSockets UND (normale) Sockets handelt? SSLServerSocket erbt ja von ServerSocket, doch deswegen brauche ich doch trotzdem unterschiedliche Threads, oder etwa nicht?

cheerioh und habt Dank
SiS
 
Zuletzt bearbeitet:
Hi

also ich habs nun so gelöst:

(vereinfacht):

Code:
class LoginServer extends Thread {
   private boolean isSSL = false;
   private ServerSocket serversocket = null;
   private SSLServerSocket sslserversocket = null;

   public LoginServer(int port, boolean isSSL) {
      this.isSSL = isSSL;
      
      if (isSSL) {
         sslserversocket = (SSLServerSocket) sslserversocketfactory.createServerSocket(port);
         sslserversocket.setSoTimeOut(1000);
      } else {
         serversocket = new ServerSocket(port);
         serversocket.setSoTimeOut(1000);
      }
      this.start();
   }

   public void run() {
      Socket socket;

      if (this.isSSL) 
         socket = sslserversocket.accept();
      else
         socket = serversocket.accept();

      ...
      ...

      if (this.isSSL) 
         sslserversocket.close();
      else
         serversocket.close();
   }
}

Und nun kann ich einfach irgendwo:
Code:
   new LoginServer(8888, false);
   new LoginServer(9999, true);
aufrufen und nun horcht es auf SSL und normal!

Frage: Ist dies so Java-konform? Wenn nein, was sollte ich ändern?

thx & cheerioh
SiS
 
Alternativ kannst du ein Interface MyServer erstellen, das du dann in 2 Klassen SSLLoginServer und LoginServer implementierst.

Ist meiner Meinung nach sauberer, als diese if-Unterscheidung im run().

Noch "schöner" wäre dann, SSLLoginServer von LoginServer erben zu lassen und nur die Methoden zu überschreiben, deren Funktionalität sich an SSL anzupassen hat.
 
Zurück