Network: Client Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Network: Client Problem

Beitrag von Bisonte »

Innerhalb eines WLAN werden den Rechnern meisten per DHCP beim einloggen die gleichen IP Adressen zugewiesen wie vorher.
Soll heissen, dass die IP sich dort nicht ändert. (In deinem Programm per Konfiguration lösbar).

Es reicht aus, nur einen Server (Laptop) zu nehmen, der auf alles lauscht, was der/die Clients (Minirechner) so zu melden haben.
Der Client kann jeweils vor der Messung beim Server nachfragen, was gemessen werden soll (so als Vorschlag).

Somit haben wir nur einen Server, dessen IP Adresse bekannt sein muss.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Baba_Smurf
Beiträge: 55
Registriert: 01.03.2015 12:05
Wohnort: Saarland / Püttlingen
Kontaktdaten:

Re: Network: Client Problem

Beitrag von Baba_Smurf »

Hallo,

wie Bisonte schon schrieb brauchst du nur einen Server, kannste dir so vorstellen:

kleiner rechner sendet Daten an den Server.
Server verarbeitet die Daten und schickt sie an den großen Rechner.

Großer Rechner sendet Daten an den Server, Server schickt die Daten an den kleinen Rechner.

Wie du siehst, haste 2 Rechner(auf jedem ein CLient) und nur ein Server.

Kannste dir auch so vorstellen, du hast mehrere Rechner über WLAN verbunden und nutzt nur einen ROuter.
Brauchst ja auch nicht für jeden Rechner einen Router ;-)

mfg
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Network: Client Problem

Beitrag von Thorium »

Nur nochmal zum Verständnis. Server und Client können beide senden und empfangen. Der Unterschied zwischen Server und Client ist, das der Server auf Verbindungsanfragen an einem Port lauscht und diese annehmen kann. Clients tun dies nicht, diese senden die Verbindungsanfrage an den Server und müssen dafür die Serveradresse kennen. In einem lokalen Netzwerk kannst du auch mit Hostnamen arbeiten anstatt IP. Oder du gibts dem Server eine feste IP in den Netzwerkeinstellungen.

Also ob Client oder Server legt nur fest wer zu wem die Verbindung aufbaut. Steht die Verbindung einmal geht sie in beide Richtungen, senden und empfangen.

In deinem Fall würde man einen der Rechner zum Server erklären. Dieser nimmt die Verbindungsanfragen der beiden Clients an und verwaltet die Daten. Damit du weisst welcher Client, welcher Rechner ist, kannst du das einfach mit in dein Protokoll einbauen. Also beim Verbinden sendet der Client das er z.b. der Messrechner ist.

Was mich am Anfang sehr irritiert hatte beim Netzwerk ist, dass die Daten, welche du sendest, in mehrere Packete zerteilt ankommen können oder auch mehrere Packete, die du sendest, als ein kombiniertes Packet ankommen.
Deswegen empfiehlt sich an den Anfang des Packets die Packetlänge zu schreiben. Damit man das ganze beim empfangen wieder auseinanderwurschteln oder zusammenwurschteln kann. Zumindest wenn binär gearbeitet wird, sehr wichtig.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Network: Client Problem

Beitrag von ProgOldie »

Dank erst 'mal an Thorium,Bisonte und Bab_Smurf! Jetzt ist mir Vieles klarer geworden.

Bleibt nur noch das Problem der Serveradresse. Kann ich denn dem Server mit
CreateNetworkServer(#Server, Port [, Modus [, BindedIP$]])
eine IP-Adresse zuordnen, die der Client kennen muss und wenn ja, welche nehme ich da?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Network: Client Problem

Beitrag von NicTheQuick »

Der Rechner, auf dem der Server läuft, hat automatisch eine IP-Adresse. Die siehst du in den Einstellungen bzw. Eigenschaften deines Netzwerkinterfaces im Computer. Den Parameter 'BindedIP$' brauchst du nur, wenn in dem Rechner mehr als eine Netzwerkkarte enthalten ist, also wenn du z.B. einen WLAN- und einen LAN-Adapter hast. Dann musst du die IP-Adresse des entsprechenden Gerätes dort angeben.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Network: Client Problem

Beitrag von HeX0R »

NicTheQuick hat geschrieben:Den Parameter 'BindedIP$' brauchst du nur, wenn in dem Rechner mehr als eine Netzwerkkarte enthalten ist, also wenn du z.B. einen WLAN- und einen LAN-Adapter hast. Dann musst du die IP-Adresse des entsprechenden Gerätes dort angeben.
Das "musst" Du nur dann machen, wenn Du verhindern möchtest, dass auf beiden Geräten gehorcht wird.

I.d.R. will man ja auf allen Netzwerkadaptern horchen, nur in Ausnahmen möchte man das nicht.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Network: Client Problem

Beitrag von ProgOldie »

Ich bin dank der Hilfen und Erklärungen der Wirkungsweise der Lösung schon wieder ein Stück näher gekommen, habe aber immer noch ein Problem mit der Testkonfiguration.

Laptop1: Windows 8.1 [Server und Client ("localhost") installiert]
Laptop2: Vista [Client("localhost") installiert]

Bei beiden Rechnern ist das LAN-Kabel abgezogen. Beide können über das gleiche WLAN des Routers aufs Internet zugreifen.
Auf Laptop1 kommuniziert der Client mit dem Server.
Auf Laptop2 findet der Client aber keinen Kontakt zum Server.

Zwar kann Laptop2 nur b/g, Laptop1 aber b/g/n (Router auf b/g/n eingestellt). Daran kann es aber nicht liegen, was ich bei einer Änderung der Routereinstellung auf b/g überprüft habe.

Woran kann es liegen, wenn Laptop2 keinen Kontakt zum Client findet? Muss ich eine andere IP einstellen?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Network: Client Problem

Beitrag von mk-soft »

Firewall Einstellungen

Must eventuell in der Firewall von Windows wo der Server läuft selber eine Regel hinzufügen.
Am besten nicht das Programm freigeben, sondern eine Port Regel hinzufügen.

Nicht am Router rum fummeln. Wenn beide über W-Lan ins Internet können, dann können die lokalen Rechner sich auch gegenseitig sehen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Network: Client Problem

Beitrag von NicTheQuick »

Wenn du versucht auf localhost zu verbinden, dann versucht der Client sich mit dem Rechner zu verbinden, auf dem er selbst läuft. Du musst beim Laptop 2 also schon mit Laptop 1 verbinden, indem du dessen IP oder Hostname verwendest. Wenn du zu Google verbinden wolltest, schreibst du ja auch nicht "localhost" hin, sondern "google.de".
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Network: Client Problem

Beitrag von Sicro »

ProgOldie hat geschrieben:Konkret habe ich im Netz einen winzigen Win8.1 Mini-Rechner, der kleinere Strecken bewegt wird und Messwerte erfasst. Diese Werte sendet er dann an einen Windows8.1 Laptop. Der Laptop wiederum soll dem Kleinstrechner Steuersignale senden, anhand derer dieser weiß, was zu messen ist. Ich habe also per WLAN einen Datenaustausch in beide Richtungen.
Laut dieser Beschreibung finde ich, dass der Mini-Rechner der Server sein sollte, da dieser den Dienst anbietet.

Als Einstiegs-Code kannst du den Code aus der Hilfe von PB nehmen: http://www.purearea.net/pb/german/manua ... er.pb.html

Den Laptop stattest du mit dem Client aus, den du mit folgendem Code kompilierst: http://www.purearea.net/pb/german/manua ... nt.pb.html
Anstatt "127.0.0.1" musst du die IP-Adresse des Mini-Rechners schreiben. Alternativ kannst du auch den Computername des Mini-Rechners dort eintragen. Also einfach beim Mini-Rechner "Debug ComputerName()" ausführen und beim Client-Code "127.0.0.1" durch den erhaltenen Computername vom Mini-Rechner ersetzen.

Bezüglich geeigneter Port-Nummern lässt sich ebenfalls in der PB-Hilfe Angaben finden: http://www.purearea.net/pb/german/manua ... erver.html
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten