# Client connection per Portforwarding auf einen lokalen Serverport



## computersport (16. Sep 2013)

Servus,

ich versuch im moment eine Verbindung zu einem Server aufzubauen der auf einem lokalen Port lauscht.
Wobei die Verbindung zum Server per portForwarding erfolgt.

```
InetAddress inetAddress = InetAddress.getByName(null); // Localhost
ServerSocket serverSocket = new ServerSocket(3333, 0, inetAddress);
Socket clientSocket = serverSocket.accept();
System.out.println("Remotehost: " + clientSocket.getInetAddress().getHostName() + " RemotePort: " + clientSocket.getPort());
```

Die Ausgabe von System.out.println() ist RemoteHost: 127.0.0.1 RemotePort: (Zufälliger Port).
Der RemoteHost verliert nach der Verbindung zum Serversocket keine Anwort mehr!
Warum krieg ich bei dem stdout nicht den RemoteHost von Client angezeigt?

*[EDIT]*

Ich hab das Code beispiel mal ein bisschen ausführlicher gemacht.

Client:

```
JSch ssh = JSch();
session = ssh.getSession("root","192.168.1.2",22);
session.setPassword("MyPassword");

session.connect();

int dynamicPort = session.setPortForwardingL(2222,"127.0.0.1",4000);

Socket clientSocket = new Socket("127.0.0.1", dynamicPort);

BUfferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));

pw.println("Hello!");
pw.flush();

long timeout = System.currentTimeMillis() + 60000;

String line;

while(System.currentTimeMillis() < timeout) {
   line = br.ready() ? br.readLine() : "";

   if (line.equals("Hi Socket!")) {
      System.out.println("Juhu server is there!");
      break;
   }

   Thread.sleep(2000);
}
```

Server:

```
InetAddress inetAddress = InetAddress.getByName(null); // Localhost

ServerSocket serverSocket = new ServerSocket(4000, 0, inetAddress);

Socket clientSocket = serverSocket.accept();

PrintWriter pw = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
BufferedReader br = new BufferedReader(new  InputStreamReader(clientSocket.getInputStream()));

long timeout = System.currentTimeMillis() + 60000;

while(System.currentTimeMillis() < timeout) {
   line = br.ready() ? br.readLine() : "";

   if (line.equals("Hello!") {
      pw.println("Hi Socket!");
      System.out.println("Send message to Client!");
      pw.flush();
   }

   Thread.sleep(2000);
}
```


----------



## anti-held (16. Sep 2013)

Wenn der Server zu dem du verbunden ist auf dem localhost erreichbar ist, dann ist die Remote-Addresse von dem Socket ja der localhost.
Also wird auch dieser ausgegeben.

Oder hab ich die Frage falsch verstanden?


----------



## computersport (16. Sep 2013)

Du hast die Frage schon richtig, aber müsste die IP nicht von meinem Client sein und nicht eine lokale IP?


----------



## anti-held (17. Sep 2013)

Die IP ist ja auch vom Client. Nur dass hier dieser halt der localhost ist.
Wenn du den Client auf einem anderen PC ausführst, dann sollte dir die IP dieses anderen PC ausgegeben werden!


----------

