# server mit 2 Ports : Mit und ohne SSL Chat system



## abdelmalek (12. Okt 2004)

Hallo zusammen

Ich habe folgendes Problem:

Um ein multi-chat program zu schreiben braucht man ein server program und ein client program:

mein Fall ist komplizierter als normal. dh ich habe in meinem system 2 verschiedene Client:

1- Client mit SSL 
2- Client ohne SSL

Der Server muss mit beiden gleichzeitig Kommunizieren. dh Er muss 2 Ports haben
1- Port 5000 für normale kommunikation
2- Port 6000 für kommunikation mit SSL

Wie kann der server gleichzeitig an beiden Ports warten ohne dass eine Blockierung auftaucht. dh 2 Clients auf beiden Ports gleichzeitig einlogen und mit dem gleichen server kommunizieren.

anbei mein Problem

server-seite : 

     ...

```
ServerSocket ss = new ServerSocket(5000);
     Socket sServer = ss.accept();
```
     ...

```
public Server(int port) throws IOException 
{
```
//........................Ohne SSL

```
ServerSocket ss1 = new ServerSocket(5000);
```
//........................Mit SSL

```
ServerSocketFactory ss2 = SSLServerSocketFactory.getDefault();
        ServerSocket ssocket = ssocketFactory.createServerSocket(6000)

        System.out.println("Server Started at port : " + "5000" );        
        System.out.println("Server Started at port : " + "6000" );        
        while (true) {
                            Socket s1 = ss1.accept();
                            b1.start();
                            InputStream in_ss1 = s1.getInputStream();
                            OutputStream out_ss1 = s1.getOutputStream();

                            Socket s2 = ss2.accept();
                            b2.start();
                            InputStream in_ss2 = s2.getInputStream();
                            OutputStream out_ss2 = s2.getOutputStream();
                            ...
        }
        ...
}
```


client -seite mit SSL:
...

```
try {
        String hostname = "hostname";
        SocketFactory socketFactory = SSLSocketFactory.getDefault();
        Socket socket_SSL = socketFactory.createSocket(hostname, 6000);
    
        InputStream in = socket.getInputStream();
        OutputStream out = socket_SSL.getOutputStream();
    
        // Read from in and write to out...
    
        // Close the socket
        in.close();
        out.close();
    } catch(IOException e) {
    }
```

client - seite ohne SSL


```
try {
        String hostname = "hostname";
        Socket socket = new Socket(addr, 5000);    
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();
    
        // Read from in and write to out...
    
        // Close the socket
        in.close();
        out.close();
    } catch(IOException e) {
    }
```

für weitere Erklärungen bin ich bereit.
für einen Vorschlag wäre ich ganz besonders dankbar.

[Edit by foobar: Codetags eingefügt]


----------



## meez (12. Okt 2004)

Du kannst die Accepts in zwei verschiedenen Threads laufen lassen....


----------



## foobar (12. Okt 2004)

Du brauchst einfach zwei Broker. Guckst du hier: http://www.java-forum.org/de/viewtopic.php?t=8198&highlight=broker


----------



## abdelmalek (12. Okt 2004)

hallo 

ich habe folgendes in server seite While (true){...} gemacht 
while(true) 
{ 
... //wie vorhin 

//am ende 

new Thread(){ 
public void run(){ 
b1.start(); 
} 
}.start(); 

new Thread(){ 
public void run(){ 
b2.start(); 
} 
}.start(); 

} 

leider funktioniert nicht. 

mit brocken habe ich versucht zu verstehen wie ich mein server einrichten. leider nix. ich erfahre zum ersten mal das beispiel. könntet ihr mich noch mal oientiren. Ich weiss nicht wie ich euch danke.


----------



## foobar (12. Okt 2004)

Am besten konzentrierst du dich erstmal darauf einen Server zum Laufen zu bekommen. Das mit der SSL-Verschlüsselung kannst du dann später immer noch hinzufügen.

Der Request-Broker erstellt für jeden Request einen Thread und startet diesen:

```
new Broker(serverSocket.accept()).start();
```
Dadurch erhält jeder Request seinen eigenen Socket.


----------



## foobar (12. Okt 2004)

Guck dir mal im Krüger den Teil zur Netzwerkprogrammierung an.


----------



## abdelmalek (12. Okt 2004)

hallo 

ich habe ein server der funktionniert und die verbindung mit mehrere client uber NUR ein PORT  vorbereitet.

um 2 ports gleichzeitig zu starten geht nicht. nur ein port ist auf der andere bleibt entweder blockiert oder startet nicht. Ich kann es nicht testen weil ich kein zugriff auf PORT 2.

in allen büchern und im enternet habe ich kein beispiel SERVER mit 2 PORTS gleichzeitig. wenn ich schaffe dann kann ich einen for SSL einrichten.

Ich bin Blockiert.

Hilfe bitte bitte bitte


----------



## Illuvatar (12. Okt 2004)

2 Threads, je 1 ServerSocket, in jedem der Threads wird die accept() Methode von dem jeweiligen ServerSocket ausgeführt.


----------



## abdelmalek (12. Okt 2004)

ich habe folgendes gemacht


new Thread(){ 
//für server socket 1 :
...
public void run(){ 
Socket s1 = ss1.accept(); 
InputStream in1 = s1.getInputStream();
OutputStream out1 = s1.getOutputStream();} 
...
}.start();


new Thread(){ 
//für server socket 2 :
Socket s2 = ss2.accept(); 
InputStream in2 = s2.getInputStream();
OutputStream out2 = s2.getOutputStream();} 
...
} 
}.start();




der eine startet und der andere bleibt blockiert. so habe ich verstanden. Dies funktionniert und habe das gefühl ich habe keine Ahnung in Netzwerk programmierung mit java.


----------



## abdelmalek (12. Okt 2004)

kann jemanden mir ein einfaches laufendes beispiel anbieten mit server mit 2 ports BITTE


----------



## foobar (12. Okt 2004)

```
new Thread(){
//für server socket 1 :
...
public void run(){
Socket s1 = ss1.accept();
InputStream in1 = s1.getInputStream();
OutputStream out1 = s1.getOutputStream();}
...
}.start();
```
So wird das nichts. Du mußt für jeden Socket einen eigenen Thread erstellen, ansonsten kann dein Server keine Clients parallel bedienen.


----------

