Hiho,
ich bin's schon wieder. Ich hatte ja schonmal das Problem, dass mein "netzwerkprogramm" (erstmal die Engine nur für die Netzwerkkommunikation)
nicht richtig lief. Da hieß es, dass es an den Threads läge.
Es ist wie verflucht. Also ich habs jetzt neu geschrieben. Komplett ohne Threads.
Aber ich habe das Problem, dass das Programm total unzuverlässig und
unberechenbar läuft.
Also manchmal läufts perfekt und manchmal nicht und manchmal so hälfte hälfte.
Also bei meinem DesktopPC lokal ( connected auf 127.0.0.1 ) läufts einwandfrei. Auf meinen Laptop lokal werden so 100 Packets verschickt, dann fehlen 30 und dann die nächsten 100.
Wenn ich auf meinem Laptop den Server starte und mit meinem DesktopPC connecte gehts auch perfekt. Wenn ich auf meinem DesktopPC den Server starte und mit meinem Laptop connecte fehlen wieder ein haufen Pakete und ich habe keine Ahnung warum.
Vom prinzip her funktioniert mein Programm so:
Bei den Paketen ist der erste byte eine Checksumme, die mit jedem Paket um 1 erhöht wird ( dient zum ermitteln, ob auch alle Pakete ankommen)
Der zweite Byte ist der Befehl bzw. die Art des Paketes. Also wie das Paket
weiter Aufgebaut ist / bzw. was es beinhaltet. (z.B. im Codeexample bedeutet die 1 eine Nachricht ...also der Inhalt des Pakets ist der Nachrichtentext, den der andere bekommen soll)
Danach kommt ein Long. Dieser gibt auskunft darüber, wie lang der Paketinhalt ist. Also wenn der Text z.b. der Nachricht 6 zeichen lang ist, dann steht dort eine 7.
Dann kommt der eigentlich Inhalt des Paketes, also der worüber, der vorherige Long auskunft über die Länge gibt.
Der Buffer für die Packets ist fest.
Nochmal zusammengefasst.
1 Byte => Checksumme
1 Byte => Befehlt
4 Bytes => Länge
[Länge] Bytes => Inhalt
Die Procedure Output könnt ihr ruhig ignorieren...dort steht nichts drin, was mit dem Netzwerk zu tun hat.
Die Funktionsweise des Programms selber:
Es gibt eine Liste, wo jedes Element ein Paket ist, welches gesendet werden soll. NetSend()
Es gibt eine Liste, wo jedes Element ein Paket ist, welches empfangen wurde. NetRece()
Der Befehl "DoNetworkStuff()" erledigt alle Netzwerkdinge.
Also der sendet alle offenen Pakete aus der Sendeliste und holt
1 Paket ab. Der Rest sollte sich von selbst erklären.
Also wenn etwas unklar ist, dann fragt bitte.
Wäre nett, wenn ihr einfach testen könntet ob es bei euch funktioniert:
Einfach server starten und dann client starten (beide senden permanent nachrichten zum anderen). Wenn ihr den Debugger anschaltet, und dort "Netzwerkfehler" debuggt wird, bedeutet das, dass mindestens ein Paket gefehlt hat.
Also einfach testen ob der Code bei euch geht, damit ich weis ob es ein
Problem von meinem Laptop ist, oder allgemein ein Problem ist.
Bei mir trat das Problem "Netzwerkfehler" ziemlich schnell auf...also so ca. nach 200~300 Paketen.
Code
Vielen Dank fürs Testen
mfg. Kooky
Netzwerkpakete verschwinden [Erledigt]
Netzwerkpakete verschwinden [Erledigt]
Zuletzt geändert von Kooky am 24.12.2005 14:50, insgesamt 1-mal geändert.
Das hatten wir doch schon ?
http://forums.purebasic.com/german/viewtopic.php?t=6115
Ich hatte Dir dort empfohlen, die Rückgabewerte von
ReceiveNetworkData() und SendNetworkData() auszulesen
und zu berücksichtigen .....
In deinem gegenständlichen Code ist das aber nicht berücksichtigt
So wird es leider nie zuverlässig funktionieren.
Cu Team100

http://forums.purebasic.com/german/viewtopic.php?t=6115
Ich hatte Dir dort empfohlen, die Rückgabewerte von
ReceiveNetworkData() und SendNetworkData() auszulesen
und zu berücksichtigen .....
In deinem gegenständlichen Code ist das aber nicht berücksichtigt

So wird es leider nie zuverlässig funktionieren.
Cu Team100
Kompliziert kann es jeder lösen, aber das wirklich Geniale ist einfach.....