TCP - Daten übertragen
Übersicht

Dirk KnoopBetreff: TCP - Daten übertragen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich möchte sehr viele Daten über das Internet für ein Online-Spiel übertragen, die alle ankommen müssen. Wie folgt habe ich es programmiert. Ich kann es zur Zeit leider nur über ein lokales Netzwerk austesten. Sehr ihr hier Probleme ? Später kommen noch viel mehr Daten dazu. Welchen Port nimmt man idealerweise ? Code: [AUSKLAPPEN] ;HOST Graphics 1024,768 AppTitle "Host" ;deutsche Vereine Dim Mannschaft_Name$(8,18) Dim Mannschaft_Stadiongroesse(8,18) Dim Mannschaft_Wappen_Nummer(8,18) ;Vereine einlesen datei$="Daten/vereine.txt" file=ReadFile(datei$) zaehler=0 For a=1 To 8 leer$=ReadLine(file) For b=1 To 18 zaehler=zaehler+1 Mannschaft_Name$(a,b)=ReadLine(file) Mannschaft_Stadiongroesse(a,b)=ReadLine(file) If Mannschaft_Stadiongroesse(a,b)>100000 Then Mannschaft_Stadiongroesse(a,b)=100000 Mannschaft_Wappen_Nummer(a,b)=zaehler Next Next CloseFile file ;Spieler Dim Spieler_Name$(8,18,25) Dim Spieler_Vorname$(8,18,25) Dim Spieler_Position$(8,18,25) Dim Spieler_Alter(8,18,25) Dim Spieler_Staerke#(8,18,25) Dim Spieler_Nation(8,18,25) ;Spieler einlesen For a=1 To 8 For b=1 To 18 datei$="Daten/Spieler/spieler"+str$(a)+"_"+str$(b)+".txt" file=ReadFile(datei$) zaehler=0 For c=1 To 20 Spieler_Name$(a,b,c)=ReadLine(file) Spieler_Vorname$(a,b,c)=ReadLine(file) Spieler_Position$(a,b,c)=ReadLine(file) Spieler_Alter(a,b,c)=ReadLine(file) Spieler_Staerke#(a,b,c)=ReadLine(file) Spieler_Nation(a,b,c)=ReadLine(file) Next CloseFile file Next Next ;Netzwerkspiel starten Global Stream = CreateTCPServer( 8080 ) Global ClientStream ;Warten, bis Client sich anmeldet While NewClient=0 NewClient = AcceptTCPStream( Stream ) ClientStream = NewClient Wend ;Sende dem Klient, daß Anmeldung ankam sende_Daten$("anmeldung kam an") ;Taste drücken Print "Taste drücken" WaitKey ;Sende dem Klient alle Vereinsdaten For a=1 To 8 For b=1 To 18 sende_Daten$(Mannschaft_Name$(a,b)) sende_Daten$(Mannschaft_Stadiongroesse(a,b)) sende_Daten$(Mannschaft_Wappen_Nummer(a,b)) Next Next ;sende dem Klient alle Spielerdaten zu For a=1 To 8 For b=1 To 18 For c=1 To 20 sende_Daten$(Spieler_Name$(a,b,c)) sende_Daten$(Spieler_Vorname$(a,b,c)) sende_Daten$(Spieler_Position$(a,b,c)) sende_Daten$(Spieler_Alter(a,b,c)) sende_Daten$(Spieler_Staerke#(a,b,c)) sende_Daten$(Spieler_Nation(a,b,c)) Next Next Next ;sende Daten Function sende_Daten$(var$) WriteLine ClientStream, var$ End Function ;empfange Daten Function empfange_Daten$() neuenachricht$="" geschafft_empfang=0 While geschafft_empfang=0 If ClientStream ;While ReadAvail( ClientStream ) neuenachricht$=ReadLine( ClientStream ) geschafft_empfang=1 ;Wend EndIf Wend Return neuenachricht$ End Function Code: [AUSKLAPPEN] ;Join Graphics 1024,768 AppTitle "Join" ;deutsche Vereine Dim Mannschaft_Name$(8,18) Dim Mannschaft_Stadiongroesse(8,18) Dim Mannschaft_Wappen_Nummer(8,18) ;Spieler Dim Spieler_Name$(8,18,25) Dim Spieler_Vorname$(8,18,25) Dim Spieler_Position$(8,18,25) Dim Spieler_Alter(8,18,25) Dim Spieler_Staerke#(8,18,25) Dim Spieler_Nation(8,18,25) ;Netzwerkspiel starten Global Stream = OpenTCPStream( "169.254.77.178",8080 ) If Stream=0 Then Print "Fehler:" : End ;warten auf OK vom Host geschafft=0 While geschafft=0 ;Daten empfangen nachricht$ = empfange_Daten$() If nachricht$="anmeldung kam an" Then geschafft=1 Wend ;Taste drücken Print "Taste drücken" WaitKey ;empfange alle Vereinsdaten For a=1 To 8 For b=1 To 18 Mannschaft_Name$(a,b)=empfange_Daten$() Mannschaft_Stadiongroesse(a,b)=empfange_Daten$() Mannschaft_Wappen_Nummer(a,b)=empfange_Daten$() Print Mannschaft_Wappen_Nummer(a,b)+". "+Mannschaft_Name$(a,b)+" "+Mannschaft_Stadiongroesse(a,b) Next Delay 1000 Next ;empfange alle Spielerdaten For a=1 To 8 For b=1 To 18 For c=1 To 20 Spieler_Name$(a,b,c)=empfange_Daten$() Spieler_Vorname$(a,b,c)=empfange_Daten$() Spieler_Position$(a,b,c)=empfange_Daten$() Spieler_Alter(a,b,c)=empfange_Daten$() Spieler_Staerke#(a,b,c)=empfange_Daten$() Spieler_Nation(a,b,c)=empfange_Daten$() Print Spieler_Position(a,b,c)+". "+Spieler_Vorname$(a,b)+" "+Spieler_Name$(a,b)+" "+Spieler_Alter(a,b)+" "+Spieler_Nation(a,b)+" "+Spieler_Staerke# Next Delay 1000 Next Next End ;sende Daten Function sende_Daten$(var$) WriteLine Stream, var$ End Function ;empfange Daten Function empfange_Daten$() neuenachricht$="" geschafft_empfang=0 While geschafft_empfang=0 If Stream ;While ReadAvail( Stream ) neuenachricht$=ReadLine( Stream ) ; ReadLine liest den übertragenen Text aus geschafft_empfang=1 ;Wend EndIf Wend Return neuenachricht$ End Function |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
- Zuletzt bearbeitet von Dirk Knoop am Sa, Dez 04, 2010 10:58, insgesamt einmal bearbeitet
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
auf Wunsch kann ich auch das Datenpaket per email zusenden | ||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versteh dein Problem nicht so ganz.
Warum brauchst du so viele daten ? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das wird ein neuer Fussball-Manager, den man gegeneinander über das Internet spielen kann.
Bei dem Erstellen eines neuen Spiels muss der Host die Daten einmalig an den Join senden. Da jeder seine lokalen Daten editieren kann, soll so sichergestellt werden, dass beide Spieler mit den selben Daten spielen. Bei einigen Tests bei mir kommen nicht immer alle Daten an. Eigentlich soll TCP doch sicherstellen, dass alles ankommt, oder ? Code: [AUSKLAPPEN] If Stream ;While ReadAvail( Stream ) neuenachricht$=ReadLine( Stream ) geschafft_empfang=1 ;Wend EndIf Muss das "If Stream" dort so stehen ? Ist dieser Teil richtig, oder muss das Semikolon vor dem While weg oder muss dort eine IF-Abfrage stehen ? Dirk Knoop |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das "if stream" stellt nur sicher dass dein Stream-Handle nicht 0 ist... das ist socher nicht blöd, aber ob es nötig is kann ich jetzt nicht sagen. Sollte genügen wenn es einmal vor dem empfangen abgefragt wird, nicht laufend.
Aber wie dem auch sei ich finde deine Datenmengen etwas extrem... Code: [AUSKLAPPEN] Dim Spieler_Name$(8,18,25)
Dim Spieler_Vorname$(8,18,25) Dim Spieler_Position$(8,18,25) Dim Spieler_Alter(8,18,25) Dim Spieler_Staerke#(8,18,25) Dim Spieler_Nation(8,18,25) Dim Mannschaft_Name$(8,18) Dim Mannschaft_Stadiongroesse(8,18) Dim Mannschaft_Wappen_Nummer(8,18) das allein sind schon 8*18*25=720, mal 6 (6 solcher Arrays) ist 4320 plus 8*18=144, mal 3 ist 432, unterm Strich 4752 Integers, also mal 4 sind 19008 bytes. --> 19kb allein für eventuell sogar leere Daten. Das sich das ganze extrem aufmutlipliziert wenn die Strings nicht leer sind sondern jeder auch noch nur 3 Zeichen zum Beispiel enthält... pfumm... ich glaub es wär bald besser du nimmst dir die "BlitzZipAPI" oder wie sie heißt und komprimierst deine Dateien mal. Und das Archiv versendest du. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Am besten du speicherst das in eine Datei und versendest dann nur die Datei... So ist es am sinnvollsten !
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ist eine gute Idee.
Macht es Sinn, diese zu zippen ? Wie sendet man denn eine Datei mittels TCP ? |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Nein, das macht keinen sinn.
2. Entweder Byte für Byte (dauert aber LAAANGE), oder du guckst dir mal meine "SimpleUDP2" an (Signatur), da kannst du Nachrichten senden die genau wie bei TCP zu 100% ankommen, es trotzdem nicht das Programm aufhält und du zusätzlich z.B. Banks versenden kannst ( damit kannst du Byte-Blöcke der Datei versenden, z.B. immer 5000Byte, und die dann am ende richtig zusammensetzen tust). Würde ich dir empfehlen, da sachen wie verwaltu8ng des Hostes usw. Direkt mit drin ist ! mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für diesen Tipp. Ich schaue mir das heute Abend einmal in Ruhe an. | ||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group