# Thematik Client server



## elm84 (12. Sep 2014)

Hallo zusammen,
ich arbeit an und mit einer Software, welche Client Socketverbindungen zur Datenübertragung verwendet.
Problematik ist, das diese Software oft durch Firewalls muss und daher hohen Supportaufwand darstellt.

Bisher wird die einfache Socketverbindung verwendet über einen extra Port der freigeschaltet werden muss bei eingehender Verbindung.

Ich selber habe etwas java Erfahrung komme aber eigentlich aus dem C Bereich. Außerdem fehlt mir etwas der Hintergrund bei den IT Problemen.

Ich soll nun aber verschiedene Möglichkeiten Testen den Aufwand durch diese Firewalls zu kommen zu verringern.
Die Nutzer verwenden Hauptsächlich frei Port 80 und oder 443. 

Nun meine Frage welche Möglichkeiten stehe mir für eine Client Server Kommunikation so überhaupt offen im Java Bereich. Ich habe sehr viele Themen gesehen. Weis aber nicht ohne erheblichen Aufwand welches Thema in diesem Netzwerkbereich gut passt.

Habe Themen wie JSON, http, Websocket, Socket und einiges anderes gesehen. Mit wird aus den einzelnen Themen durch oberflächliches lesen aber nicht gleich ersichtlich was mich zum Ziel führen könnte.

Darum meine Frage um mich einzulesen. Welche Technologien können mir helfen über Port 80/443 eine am besten verschlüsselte Datentransfers zu ermöglichen, welche auch nicht gleich durch Contentfilter geblockt werden. Dann würde ich mich in diesen Themen gezielt einarbeiten.

Danke schon mal!

Grüße elm84


----------



## empty23 (12. Sep 2014)

Also die Beschreibung was die Anwendung denn eigentlich tun soll ist ein bisschen vage. Generell ist Port 80 für HTTP vorgesehen und 443 für HTTPs. Wenn du also etwas verschlüsseltest willst, dann würde ich schonmal zu HTTPS raten. Trotzdem will ich es vorher gesagt haben: Das Tunneln von Daten durch diese Ports, die eigentlich nicht auf diese Ports gehören, ist eigentlich nicht Sinn der Sache. Wenn es schon eine bestehende Software gibt, die auf einem gewissen Port agiert, dann wäre es wohl logischste Konsequenz, dass dieser Port auch freigegeben wird (und nicht die gesamte Software neu geschrieben wird und damit 1. Entwicklungskosten und 2. Wartungskosten entstehen)

Wenn wir die Grundüberlegung (ob diese Designentscheidung im Grunde überhaupt richtig ist) außen vor lassen, dann solltest du dir trotzdem selbst einen Überblick über die angesprochenen Technologien verschaffen. Du vermischst hier Protokolle (HTTP, ...) und einfache Datenformate in Form einer bestimmten Konvention (JSON). Diese Technologien sind keineswegs auf Java begrenzt sondern in so gut wie allen anderen Sprachen auch verfügbar - auch in C. Stell dir vielleicht vorher folgende Fragen:

1. Wie sollen die Daten übertragen werden (in welcher Form)? 
1a. Kommen am Client & Server die gleichen Technologien zum Einsatz (z.B. sind beide in Java geschrieben)?
1b. Wird es unterschiedliche Clients geben?
1c. Entwickelt ihr sowohl Client, als auch Server und rollt die Updates gleichzeitig aus?

2. Welche Übertragungsmethode ist die richtige?
2a. Soll der Client immer eine Abfrage initiieren, oder soll es auch der Server können?
2b. Wie oft ist ein Datenaustausch notwendig? Ist es ein ständiges hin & her, oder holt der Client einmal Daten und verarbeitet die?
3c. So wie ich das verstanden habe, willst du ja nur den Client austausch - d.h. mit welchen Protokoll ist der Server überhaupt kompatibel?

Lg


----------



## elm84 (15. Sep 2014)

Hi empty23,
danke für deine Antwort.

Du hast recht die gefragt Thematik geht nicht direkt nur in JAVA. Habe das System zu wenig beschrieben.
Aktuell sind Client/Clients(verschiedene) und Server alle in Java. In Zukunft wird es vermutlich noch einen Client in C/C++ geben.
Dazu kommt das die Harwarekonstellation auch nicht immer gleich ist. Der Java Server ist mal auf nen Server im Netz und mal auf nem Server im Kundennetzwerk.

"Also die Beschreibung was die Anwendung denn eigentlich tun soll ist ein bisschen vage. Generell ist Port 80 für HTTP vorgesehen und 443 für HTTPs. Wenn du also etwas verschlüsseltest willst, dann würde ich schonmal zu HTTPS raten."
Ok danke. Das hilft mir ja schon mal.

"Trotzdem will ich es vorher gesagt haben: Das Tunneln von Daten durch diese Ports, die eigentlich nicht auf diese Ports gehören, ist eigentlich nicht Sinn der Sache. Wenn es schon eine bestehende Software gibt, die auf einem gewissen Port agiert, dann wäre es wohl logischste Konsequenz, dass dieser Port auch freigegeben wird (und nicht die gesamte Software neu geschrieben wird und damit 1. Entwicklungskosten und 2. Wartungskosten entstehen)"
Mir ist klar das der Aufwand nicht wenig ist und das http/https eigentlich nicht dafür gedacht ist. Aber bevor irgendwas in der Software geändert wird werde ich erst testen ob das ganze praktikabel ist mit einfacher Datenverbindung. 
Das ganze passiert auch auf Wunsch diverser Kunden. Da diese in großen Netzwerken sitzen bei denen die EDV oft Richtlichnien hat bei denen wir schwer zu kämpfen haben einen Port frei zu bekommen. Deshalb der Wunsch der Kunden als auch von uns dazu.

"
1. Wie sollen die Daten übertragen werden (in welcher Form)? 
1a. Kommen am Client & Server die gleichen Technologien zum Einsatz (z.B. sind beide in Java geschrieben)?
1b. Wird es unterschiedliche Clients geben?
"
Diese fragen wurden ja oben im Text beantwortet.

"
1c. Entwickelt ihr sowohl Client, als auch Server und rollt die Updates gleichzeitig aus?
"
Wenn es soweit kommt ja.

"
2. Welche Übertragungsmethode ist die richtige?
2a. Soll der Client immer eine Abfrage initiieren, oder soll es auch der Server können?
2b. Wie oft ist ein Datenaustausch notwendig? Ist es ein ständiges hin & her, oder holt der Client einmal Daten und verarbeitet die?
3c. So wie ich das verstanden habe, willst du ja nur den Client austausch - d.h. mit welchen Protokoll ist der Server überhaupt kompatibel?
"
Da werde ich nun dran arbeiten danke


----------

