Arrays per Netzwerk
Übersicht

BlitzComerBetreff: Arrays per Netzwerk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Abend zusammen ![]() Hier zu meiner ersten Frage im Blitzforum: Ist es möglich Arrays per Netzwerk, in meinem Fall über UDP zu verschicken. Bei mir will das nicht so ganz klappen. Ich erkläre mal eben, was ich überhaupt machen möchte. Also der Server liest mehrere Texttitel von Textdateien aus und speichert bei jedem Schleifendurchgang diesen Titel in einen Array. Dann werden die Arrays an den Clienten geschickt. Dieser empfängt diese und soll sie untereinander schreiben. Ich hoffe das war so weit verständlich. Ich veröffentliche mal meine Codeschnipsel. Damit ihr das einigermaßen nachvollziehen könnt. Wäre klasse, wenn einer meinen Fehler entdeckt ![]() Server: Code: [AUSKLAPPEN] Verz = ReadDir("DATENBANK\Clubs\") For i=0 To 16 Clubs_dat$ = NextFile$(Verz) If FileType("DATENBANK\Clubs\" + Clubs_dat$) = 1 Then Clubs$(i)=Left$(Clubs_dat$,Len(Clubs_dat$)-4) Text 100,20*i,Clubs$(i) EndIf For c.client=Each client WriteInt udp_stream,c\ip WriteByte udp_stream,4 WriteLine udp_stream, Clubs$(i) SendUDPMsg udp_stream,c\ip,8010 Next Next CloseDir Verz Nun der Client: Code: [AUSKLAPPEN] Case 4 Clubs$(i)=ReadLine(udp_stream) ; End Select Color 20,60,87 Rect 60,60,500,400 For i=0 To 16 Color 255,255,255 Text 60,60+20*i, Clubs$(i)+" "+i Next End Function |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Server:
Keine programmbeeinträchtigenden Fehler. Es ist mir nur unklar, wieso du dem Client seine eigene IP zusendest. Die Überprüfung Code: [AUSKLAPPEN] If FileType("DATENBANK\Clubs\" + Clubs_dat$) = 1 Then is gewiss sinvoll, sollte dann aber auch weiter greifen, dass den Clients im Fehlerfall nicht allen ein leerer Name gesendet wird.
@Client: Nur ein kleines Bruchstück. Trotzdem scheint es mir, als ob du zwei Schleifen ineinander verschachtelst, die als Zählervariable beide i verwenden. Das kann nicht gut gehen. UDP ist als Netzwerkprotokoll sehr kompliziert. Weiterer Client-Code könnte helfen, auch Server-Code wäre interessant. Stellst du überhaupt sicher, dass alle Pakete ankommen? ZEVS |
||
BlitzComer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also der gepostete Code gibt bisher das aus: https://www.blitzforum.de/upload/file.php?id=10869
Wenn ich die Zählschleife i durch bspw. a tausche, dann gibt der alle Clubs ganz schnell aus und das 16 mal, das ist ja auch klar, weil ich ja geschrieben habe: Text 0,60+20*a, clubs(i) Wie stell ich denn fest, dass alle Pakete angekommen sind? |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da musst du dir ein spezielles (Wahrscheinlich Type![]() Für das Problem mit dem größeren Zeitraum brauche ich wirklich mehr Code. ZEVS |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde es über eine art ID regeln.
Jedem "packet" schreibt du vorne eine spezielle nummer, zb eine Short. Nun liest du auf deiner Serverseite in einem rutsch alle titel in einen String - Array an. Dem client sendest du ersteinmal, wieviele titel du hast (wie groß dein string array ist!). Als ID stellst du zb 0 vorne an. Client erhält ein pack mit id 0. Nun weiß er: Okay, initialisieren wir mal alles. Er liest aus dem packet aus, wieviele titel zu erwarten sind und legt damit 2 Arrays an - einmal die Titel und einmal einen "Empfangen-Array" - zb int. Anzahl der einträge ist die selbe wie du titel hast. Jedes element im Int-array sollte mit 0 initialisiert werden. Nun sendet der Client dem server ein pack, ala id 1, inhalt erwartende titel. Erhält der server das pack mit id 1, und der passenden anzahl an titeln, gehts los, er sendet die daten. Als id setzt du zb die 2 vorne an, danach den index im array. zuletzt sendest du dem client noch ein spezielles abschluss pack, zb id 10. Sobald der client ein pack mit id 2 hat, weiß er, das der 2te Int daran die index nummer ist. Er setzt nun Titel(Index) = Titel (auszulesen aus stream) , und IntArray(index) = 1. Zuletzt erhält der client das pack mit id 10, was bedeutet, das der server der meinung ist, das er fertig hat. Client prüft hier, ob er wirklich überall im IntArray() eine 1 hat und sendet dann eine bestätigung. Andernfalls muss er wiederrum beim server nach den fehlenden array-indexen anfragen. Ziemlich lästiges system, aber es klingt schwerer als es ist. Ich hab sowas mal für ein Map-senden geschrieben, da gingen zirka 120kb daten durch und locker 80% gingen verloren. Das lag allerdings daran, das ich 'zu schnell' gesendet hab - mit nem künstlichen send-delay (über millisecs() ) gings dann runter auf 10% verlust, die aber ganz schnell nachgesendet wurden. ![]() Hoffentlich konnte ich dir einen vorschlag zum sichereren übertragen mit UDP nahebringen :3 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group