tcp protokoll? oder doch nicht?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

tcp protokoll? oder doch nicht?!

Beitrag von Moxl »

Hallo an alle :allright:

ich interessiere mich schon seit einiger zeit für das netzwerk programmieren in purebasic sprich server und clients programmieren.
Deswegen quält mich jetzt auch immer häufiger die frage, wie genau programmiert man in Purebasic einen perfekten datenaustausch zwischen server und client? Ich meine so etwas wie das TCP protokoll. Ich hab mich schon in wikipedia darüber informiert wie es genau funktioniert und das es sehr sicher und erfolgreich ist.
Jetzt steht in Purebasic bei createnetworkserver() und bei send/receivenetworkdata() das diese befehle das tcp protokoll bereits benutzen? :freak: Aber bei anderen Themen hier in dem Forum wird immer wieder erläutert man solle auf die Rückgabewerte achten da man ja nie weiß ob nicht daten verloren gegangen seien.
Aber da die befehle ja bereits das tcp protokoll verwenden, versteh ich nicht wie dann daten verloren gehen können?

Am besten würde ich ein eigenes protokoll schreiben aber ich weiß nicht ob die befehle jetzt das tcp protokoll verwenden oder nicht?

Wenn ich jetzt 1 byte via sendnetworkdata versende und überprüfe wie viele bytes angekommen sind und ich 1 byte raus kriege, kann ich ja wohl kaum das tcp protkoll benutzen da der header ja schon eigentlich 20 bytes oder so haben müsste. Oder wird die größe vom header schon abgezogen? fragen über fragen :roll:

Kann mich jemand in meinem dilemma etwas unterstützen und mir einiges erläutern? :bounce:


vielen dank schonmal im vorraus :allright:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: tcp protokoll? oder doch nicht?!

Beitrag von STARGÅTE »

Das TCP-Protokoll sogt dafür, dass Binärdaten von deinem PC sicher zum anderen PC kommen, also den Weg durch das Internet finden. Dieses Protokoll ist in der Art "sicher", dass man sagen kann, dass die Daten die gesendet werden auch am richten PC vollständig ankommen.

Von Pure Basic seite es jedoch nun notwendig, diese Daten auch in PB zu "importieren", dass heißt die Daten aus dem Netzwerk-Buffer in PB zu laden.

Hier ist es wichtig zu wissen wie PB arbeitet.
Wenn jemand 200MB sendet, kommen auch 200MB sicher mit TCP an.
In PureBasic reicht es aber nicht einmal ReceiveNetworkData() mit 200MB aufzurufen.
Grund ist, dass die 200MB zwar sicher ankommen, aber eben nicht sofort, sondern stück für stück, je nach Übertragungsgeschwindigkeit und Netzwerkbuffer.
Es ist also wichtig, ReceiveNetworkData() richtig zu verwenden, da man sonst durch eigene Fehler im Code, Daten verschluckt.

Details dazu findest du halt in den jeweiligen Themen die du schon gesehen hast.
Moxl hat geschrieben:Wenn ich jetzt 1 byte via sendnetworkdata versende und überprüfe wie viele bytes angekommen sind und ich 1 byte raus kriege, kann ich ja wohl kaum das tcp protkoll benutzen
Klar. Es reicht ja nicht, einfach nur ein Byte "ins Netzwerkkaben zu schreiben".
Für eine SMS mit den Inhalt "A" musst du ja trotzdem die Telephonnummer wählen :wink:
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: tcp protokoll? oder doch nicht?!

Beitrag von RSBasic »

STARGÅTE hat geschrieben:Grund ist, dass die 200MB zwar sicher ankommen, aber eben nicht sofort, sondern stück für stück, je nach Übertragungsgeschwindigkeit und Netzwerkbuffer.
Es hat auch was mit der maximalen Paketgröße zu tun, die bei 64 KB (Brutto) liegt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: tcp protokoll? oder doch nicht?!

Beitrag von Moxl »

ok danke erstmal für die antworten :)

also wenn ich jetzt 1 byte in einen puffer schreibe und ihn mit sendnetworkdata() versenden will dann sendet er in wirklich nicht nur 1 byte sondern mehr... also die informationen wo die daten hingehen sollen usw.
ok soweit versteh ich das.
was ich halt doof finde ist, das man nicht sieht wie genau purebasic arbeitet deswegen frag ich mich hier im forum durch :mrgreen:

wenn man jetzt zB einen string sendet der nur ein paar byte groß ist (was dann natürlich in einem paket gesendet und empfangen werden kann??) dann müsste es ja sicher sein das der string auch richtig ankommt? es seidenn der empfangspuffer ist voll dann gibt sendnetworkdata() ja -1 raus... soweit richtig?

wie genau mach ich das denn jetzt wenn ich zB eine datei mit einer größe von 100MB senden will?
muss ich mir quasi ein zweites protokoll schreiben, dass er, wie im tcp protokoll, erst ein paket mit 1460byte schickt...antwort bekommt das das paket angekommen ist, dann wieder 1460byte verschickt...wieder antwort bekommt das diese 1460byte angekommen sind usw usw.... ? oder wie meint ihr macht man es am besten?
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: tcp protokoll? oder doch nicht?!

Beitrag von Bisonte »

Moxl hat geschrieben:wie genau mach ich das denn jetzt wenn ich zB eine datei mit einer größe von 100MB senden will?
muss ich mir quasi ein zweites protokoll schreiben, dass er, wie im tcp protokoll, erst ein paket mit 1460byte schickt...antwort bekommt das das paket angekommen ist, dann wieder 1460byte verschickt...wieder antwort bekommt das diese 1460byte angekommen sind usw usw.... ? oder wie meint ihr macht man es am besten?
Diese Vorgehensweise ist das TCP Protokoll...

Deine Aufgabe ist es, die Daten, die da in Schueben ankommen, wieder zu dieser 100MB Datei zusammenzubauen.
Im groben bastelt man sich einen Header, wo Filename, Dateigrösse usw. enthalten sind, damit das Gegenüber auch genau weiss, was man mit den Paketen anfangen soll, die da kommen.
Dann hat man schon die Dateigrösse und holt solange Daten aus dem Netzwerkpuffer, bis man die endgültige Dateigrösse erreicht hat.

Und voila... der Adler ist gelandet.
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​​
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: tcp protokoll? oder doch nicht?!

Beitrag von Chimorin »

Um mich hier gleich mal mit anzuhängen:
Wie war das nochmal mit UDP? Ich meine im Köpflein zu haben, dass zwar alle Pakete ankommen, aber durcheinander (Nur in Verbindung mit PB)?!
Sonst steht ja überall, dass bei UDP auch Daten verloren gehen können.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: tcp protokoll? oder doch nicht?!

Beitrag von STARGÅTE »

Jo. Aber das ist keineswegs schlecht.

TCP ist für eine sichere und zuverlässige Übertragung von Daten (zB. Dateien), wo man sicherstellen möchte, dass von zB. 100MB wirklich wieder diese 100MB ankommen.
UDP ist hingegen für eine schnelle und kontinuierliche Übertragung von Daten (zB. Streams), wo es "egal" sein kann, ob mal ein Frame (bei einem Video) fehlt.
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
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: tcp protokoll? oder doch nicht?!

Beitrag von ts-soft »

TCP ist ähnlich dem SendMessage in Windows, hier wird der Erfolg überprüft, dadurch aber auch mehr Traffic.
UDP ist ähnlich dem PostMessage in Windows, es wird gesendet und das war es.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: tcp protokoll? oder doch nicht?!

Beitrag von Moxl »

ok also ich glaube soweit hab ichs verstanden.
ich werd das die nächsten tage mal umsetzen und wenn noch fragen sind dann meld ich mich nochmal ;)

danke an alle :allright:
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: tcp protokoll? oder doch nicht?!

Beitrag von Moxl »

Im groben bastelt man sich einen Header, wo Filename, Dateigrösse usw. enthalten sind, damit das Gegenüber auch genau weiss, was man mit den Paketen anfangen soll, die da kommen.
Dann hat man schon die Dateigrösse und holt solange Daten aus dem Netzwerkpuffer, bis man die endgültige Dateigrösse erreicht hat.
also packt man die daten die man zu schicken hat auch direkt nach den header sodass das erste paket aus header+daten besteht, das 2. paket aus daten usw...? Oder ist es vorteilhafter erst ein paket zu schicken das nur aus diesem header besteht und danach dann anfängt die datenpakete zu schicken?

Und wenn man nur ein paket zu schicken hat, müsste es ja eine garantie geben das dieses paket auch vollständig ankommt oder? da es ja mittels tcp protokoll verschickt wird? seidenn natürlich der empfangspuffer ist voll vom empfänger aber das is ja was anderes :mrgreen:
Antworten