tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
537
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    StehtimSchilf StehtimSchilf ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Beiträge
    117
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    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
    Geändert von StehtimSchilf (20.02.09 um 12:33 Uhr)
     

  2. #2
    StehtimSchilf StehtimSchilf ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Beiträge
    117
    Hi

    also ich habs nun so gelöst:

    (vereinfacht):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    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 :
    1
    2
    
       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
     

  3. #3
    Avatar von procurve
    procurve procurve ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    158
    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.
     

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 28.06.10, 23:06
  2. Sockets und Threads in C++
    Von Ischterai im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 26.03.09, 19:22
  3. [C] Problem mit Sockets und Threads
    Von hebru im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 08.10.07, 08:36
  4. C# - Fortschritt eines Threads abfragen
    Von Alexander12 im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 04.09.05, 18:41
  5. Antworten: 6
    Letzter Beitrag: 10.12.04, 14:04