SendNetworkString

Für allgemeine Fragen zur Programmierung mit PureBasic.
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

SendNetworkString

Beitrag von stevie1401 »

Ich benutze bei meinem kleinen Server
Ergebnis = SendNetworkString(Verbindung, String$ [, Format])

"Ergebnis" zeigt mir immer an, dass der String gesendet wurde. Das ist aber ab und zu nicht der Fall.
Kann es sein, dass dann gerade die "Leitung" vom TCP geblockt wurde?
Wie kann ich sicher erfahren, ob ein String beim Client angekommen ist?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SendNetworkString

Beitrag von RSBasic »

Eigentlich ist TCP genau dafür da, um sicherzustellen, dass die gesendeten Pakete ankommen.
Ansonsten kann dein Client nach Erhalt des Paketes einfach ein Bestätigungspaket zurücksenden. Dann kannst du auch gleich UDP verwenden, weils schneller ist.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SendNetworkString

Beitrag von Kiffi »

ich würde eigentlich auch eher schauen, ob der Fehler nicht auf der Seite des Empfängers liegt.

Grüße ... Peter
Hygge
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: SendNetworkString

Beitrag von STARGÅTE »

stevie1401 hat geschrieben:"Ergebnis" zeigt mir immer an, dass der String gesendet wurde.
Nein, das stimmt leider nicht.
Das Ergebnis zeigt dir nur an, dass der String erfolgreich in den Netzwerk-Puffer kopiert wurden und zum Versenden bereit steht.
Ich verweise an dieser Stelle immer gerne auf folgende Diskussion:
http://www.purebasic.fr/german/viewtopi ... 57#p307857
stevie1401 hat geschrieben:Kann es sein, dass dann gerade die "Leitung" vom TCP geblockt wurde?
Was meinst du mit geblockt?
stevie1401 hat geschrieben:Wie kann ich sicher erfahren, ob ein String beim Client angekommen ist?
Da das TCP-Protokoll bereits ein Handshake enthält, kommen gesendete Daten immer an, außer einer der beiden NetzwerkPuffer läuft voll oder einer verlässt die Verbindung.
Um sicher zu gehen, sollte der Client einfach etwas zurück schicken (zB Prüfsumme des erhaltenen Strings), die der Server abgleicht.
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
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: SendNetworkString

Beitrag von HeX0R »

Um sicher zu gehen, sollte der Client einfach etwas zurück schicken
Eigentlich ist das unnötig, man muss allerdings ein wenig WinAPI benutzen, um zu wissen was das eigentliche Problem ist.
Siehe mögliche Fehlermeldungen hier:
https://msdn.microsoft.com/de-de/librar ... s.85).aspx

Mit "geblockt" meinte er übrigens WSAEWOULDBLOCK, das sieht man in der Tat gelegentlich
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: SendNetworkString

Beitrag von stevie1401 »

Erst einmal danke für eure Tips.
Ich suche verzweifelt einen funktionierenden Code für einen TCP-Server, der mit Threads läuft. Ich bekomme das mit dem Threads und dem Senden einfach nicht zuverlässig hin.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: SendNetworkString

Beitrag von mk-soft »

Der Code ist ein wenig heftig, zeigt aber die Verwendung von Threads und die Verwaltung von Clients.

Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29743
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: SendNetworkString

Beitrag von stevie1401 »

Jo, sieht sehr "massiv" aus. Ich schaue mal, ob ich davon irgendetwas verstehe.
Erst einmal vielen Dank!
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: SendNetworkString

Beitrag von stevie1401 »

Den Servercode verstehe ich leider überhaupt nicht, da nicht beschrieben ist, was da eigentlich stattfindet.
Wo fängt das Programm an?
Wo ist da die Schleife?
Wo sehe ich, wann welche Daten reinkommen und was dann mit ihnen passiert?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Antworten