Client <-> Server - Wie am besten realisieren?

09/29/2017 13:36 Bombasticx3#1
Hey yo,

ich bräuchte mal nen Denkanstoß.

Kurzes Szenario zum Verständnis:
Programm A im Netzwerk 1: Schreibt "hallo"
Programm B im Netzwerk 2 soll diesen Text empfangen.
Dann schreibt Programm B im Netzwerk 2 "Hallo" und Programm A im Netzwerk 1 soll diese emfpangen können.

Genau das würde ich gerne realisieren.
Dabei ist Programm A aufm PC und Programm B auf einem Androidgerät.
Habe mit Client-Server schon gearbeitet, aber nicht über verschiedene Netzwerke hinweg, sonder im Gleichen.

Wie fange ich am Besten an?
Was brauche ich alles dafür?
Was für Probleme könnten bei dieser Methode auftreten?

Danke schon mal für eure Hifle.

MfG Bombasticx3
09/29/2017 13:39 florian0#2
Zentraler Server der die Nachrichten verteilt ist die einfachste Methode.
Problem: Wenn der Server offline ist, kann keiner Nachrichten empfangen, Alle Nachrichten müssen durch den Server (kann überwacht werden)
09/30/2017 11:05 Menan#3
Quote:
Originally Posted by Bombasticx3 View Post
Was brauche ich alles dafür?
Was für Probleme könnten bei dieser Methode auftreten?
Du bräuchtest eine Client Software, sowie eine Server Software.
Deine beiden Geräte wären beides Clients, welche Nachrichten mit einem zentralen Server austauschen.
Der Server pusht dann neue Nachrichten auf die entsprechenden Geräte.

Probleme die du bekommen könntest, wären zum Beispiel Portfreigaben, wenn nicht beide Clients im selben Netzwerk sind. Dann könnte es sein, dass einer keine Nachrichten empfangen/senden kann, da der entsprechende Port geblockt ist.

Eine Alternative wäre es das ganze per P2P zu realisieren, so dass die Geräte direkt miteinander schreiben, aber auch hier bräuchtest du einen zentralen Server, der zumindest die einzelnen Geräte miteinander verbindet.
09/30/2017 13:52 type.#4
Falls webbasiert für dich eine Möglichkeit ist würde ich [Only registered and activated users can see links. Click Here To Register...] mal in die Runde schmeißen. Soweit ich weiß ist es sogar möglich das in native Apps einzubinden - da reicht meine Erfahrung aber nicht aus um das zu garantieren.
09/30/2017 14:45 Bombasticx3#5
Zum derzeitigen Standpunkt steht mein Server mit C++.
Er öffnet einfach nen Socket und wartet auf ne Verbindung.
Gleichzeitig steht auch der Client für Windows.

Finde das webbasierte von type. sehr interessant. Ich schaue mir es mal an.
09/30/2017 20:02 herlex#6
Quote:
Originally Posted by Bombasticx3 View Post
Zum derzeitigen Standpunkt steht mein Server mit C++.
Er öffnet einfach nen Socket und wartet auf ne Verbindung.
Gleichzeitig steht auch der Client für Windows.

Finde das webbasierte von type. sehr interessant. Ich schaue mir es mal an.
Wenn du in C++ arbeiten willst, schau dir mal die Boost Bibliothek bzw. Boost::asio an...

Hab da auch schonmal nen tcp-client/server geschrieben.
09/30/2017 20:43 Bombasticx3#7
Quote:
Originally Posted by herlex View Post
Wenn du in C++ arbeiten willst, schau dir mal die Boost Bibliothek bzw. Boost::asio an...

Hab da auch schonmal nen tcp-client/server geschrieben.
Server usw schreiben ist kein großes Problem.
Das Problem bei mir ist eher die Verbindung der Server hinzubekommen, die nicht auf dem gleichen Gerät sind.
Server->Client aufn gleichen Gerät läuft.
Aber Server auf Gerät A und Client auf Gerät B im gleichen Netzwerk klappt schon nicht.
Sobald ich einen Client für Android schreibe, gehts nicht mal per Emulator aufm gleichen Gerät.
09/30/2017 22:51 type.#8
Was genau ist denn dein Plan? Möchtest du wirklich eine Chatapplikation bauen? Dann ist eine webbasierte Lösung vielleicht garnicht die schlechteste Variante, da du mit einer PWA (fast) komplett Plattform unabhängig bist. (:
10/01/2017 01:40 warfley#9
Eigentlich ist die Lösung für dein Problem sehr einfach. IPv6, dieses Protokoll tut genau das was du willst. IPv6 kümmert sie (so wie bereits IPv4) um das routing von Paketen durch mehrere Netzwerke. Im Gegensatz zu IPv4 hat IPv6 allerdings genügend Adressen, so das jeder Computer eine eigene IPv6 Adresse bekommt, und damit die komplizierten NAT Netzwerke von IPv4 wegfallen.

Mit IPv6 würde ich nicht zu einem zentralen Server greifen, nur eine Zentrale Adressverwaltung. Über die lädst du dir dann lediglich die IP-Adressen deiner Chatpartner runter, und dann kannst du sehr einfach die Nachrichten versenden. Verteilte Systeme haben gegenüber zentralen Systemen immer den Vorteil das diese deutlich robuster und flexibler sind. Die performance sollte auch deutlich besser sein, da ein Bottleneck wegfällt und es ist natürlich von Natur aus sicherer, da man praktisch nicht wissen kann welchen Pfad ein Paket nehmen wird (trotzdem solltest du das ganze verschlüsseln).

Den einzigen Nachteil den verteilte Systeme wirklich haben ist das es deutlich schwerer zu testen ist.

Das einzige Problem ist natürlich dabei, das IPv6 praktisch noch kaum verwendet wird.
10/01/2017 14:09 Bombasticx3#10
Quote:
Originally Posted by type. View Post
Was genau ist denn dein Plan? Möchtest du wirklich eine Chatapplikation bauen? Dann ist eine webbasierte Lösung vielleicht garnicht die schlechteste Variante, da du mit einer PWA (fast) komplett Plattform unabhängig bist. (:
Mein Plan ists nur einen Text vom PC (Programm, nicht Browser) aufs Handy zu schicken. (App, nicht Browser oder so)
Ist zwar keine Chat App in dem Sinne, aber macht halt das Gleiche.
10/25/2017 21:25 iSynaptic#11
Dedizierter Server, welcher auf einem bestimmten Port lauscht, wie schon mehrmals hier erwähnt. Die beiden Clients verbinden dann zum Server und der Server ließt die Nachrichten und leitet sie eben an die anderen Clients weiter. Da du ja eh eine App für ein Smartphone realisieren willst, empfiehlt sich Java.