Ich möchte mehrere OpenNetworkConnection öffnen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Ich möchte mehrere OpenNetworkConnection öffnen?

Beitrag von funkheld »

Hallo, guten Tag.
Ich spiele mit einem Programm und möchte von dort Daten Empfangen und Steuerdaten hinschicken.
Das Empfangen geht alle 100ms mit einem Timer.
Das Abschicken der Daten geht nach Tastendruck.

Ich möchte dafür die Programme unabhängig erstellen und stelle die Fenster so ein, das sie auf den Monitor
nebeneinander stehen als ein Block.

Ich nehme an das das einfacher zu handhaben ist als wenn ich mehrere Threads erstelle ?

Danke.
Gruss
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Ich möchte mehrere OpenNetworkConnection öffnen?

Beitrag von mk-soft »

Vielleicht doch mal sich mit Threads beschäftigen...
Ist in diesem fall zu empfehlen.

Gehe davon aus das Du einen Server schreiben möchtest und mehrere Client...

Man kann folgendes tun...

Ein Thread für den Server.
In diesen wertest du aus vom welchen Client die Anfrage kommt und rufst einen neuen Thread mit der ClientID von Client auf.
Dieser Thread liest die Daten (ReceiveNetwork) und sendest die Daten zurück. Dann diesen Thread beenden.

Somit kann der Server Thread schon wieder auf eine neu Anfrage regieren und wieder einen neuen Thread starten.
Ist aber wichtig das die Compiler Option Threadsafe aktiv ist.

Noch was!

Wenn du mit deinen Daten immer schön unter der MTU Blockgröße bleibst (Im lokalen Netzwerk 1460 Byte), musst du dir keine Gedanken machen ob die Daten vollständige angekommen sind.
Erst wenn die Datenmenge über diese Grenze liegt, muss du selber darum kümmern das alle Daten komplett angekommen sind.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
¯\_(ツ)_/¯
Beiträge: 141
Registriert: 18.08.2017 09:35

Re: Ich möchte mehrere OpenNetworkConnection öffnen?

Beitrag von ¯\_(ツ)_/¯ »

mk-soft hat geschrieben:muss du selber darum kümmern das alle Daten komplett angekommen sind.
Macht das nicht das TCP?
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ich möchte mehrere OpenNetworkConnection öffnen?

Beitrag von STARGÅTE »

TCP stellt nur sicher, dass alle Daten beim Clienten/Server ankommen.
Du musst aber mit dem PB Befehl ReceiveNetworkData() sicherstellen, dass du alles "aufsammelst", denn nicht jedes Paket was du als ein Paket sendest, ist mit nur einem ReceiveNetworkData() empfangbar.
Oft sind Pakete zusammen, oft außeinandergerissen.

Weitere Infos hier: viewtopic.php?p=307857#p307857
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Ich möchte mehrere OpenNetworkConnection öffnen?

Beitrag von mk-soft »

Bei langsamer Geschwindigkeit im Netz kann es passieren das du schon mal den ersten Block bekommst und erst nach der kürzer zeit den Rest.

Unter TCP kann man bis 64kB übertragen. Diese werden dann auf mehrere Paket aufgeteilt. Das diese in der richtigen Reihenfolge und geprüft ankommen, kümmert sich das TCP Protokoll. Sollte aber nach dem senden des ersten Paketes die Verbindung abbrechen, bekommst du den Rest nicht mehr.
Somit must du dieses selber in deinen Programm überprüfen...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Ich möchte mehrere OpenNetworkConnection öffnen?

Beitrag von funkheld »

Danke für die Hilfe.

Gruss
Antworten