[UDP]WriteByte Daten von 1 Clienten werden nur Aktualisiert
Übersicht

Bobo2040Betreff: [UDP]WriteByte Daten von 1 Clienten werden nur Aktualisiert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi ![]() Ich habe nen Problem und zwar soll der Server nachdem eine Verbindungsanfrage kam die Daten an die Clienten verteilen >.> Klappt Prima! Aber um zu Verhindern das ein User permanent Online ist, falls die UDP Verbindung nicht richtig beendet wurde will ich, das er User von denen er 5Sek keine Nachricht bekam Löscht... klappt auch aber ich mache das mit ReadByte also der CLient sendet Writebyte udpStream,5 Und seine anderen Daten ... der Server, liest falls er Writebyte udpStream.5 bekommen hat die Daten die Hinterhergeschickt wurden aus klappt auch Daten werden Aktualisiert... jetzt zum Problem er Aktualisiert sie nur von einem Clienten und zwar dem der als erstes eingeloggt war... Zur überprüfung von wem die Msg kam nehme ich If info\name$=ReadLine(udpStream) Then falls das True ist dann soll er die Daten aktualisieren aber irgendwie Aktualisiert er Sie nur beim ersten Clienten und nicht beim 2. oder 3. etc. Ich weiß nicht warum kann UDP nicht "gleichzeitig" oder in einer "warteschlange" die Daten die gesendet wurden auslesen ? Das er zuerst User1 dann User2 dann User3... abarbeitet ? Jeder Client hat nen anderen Port der zufällig ausgewählt wird von UDP habe schon überprüft das keiner den Selben Port o.ä. hat... Naja hier mal der Server: BlitzBasic: [AUSKLAPPEN]
Client: BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Problem ist folgendes: In der Hauptschleife BlitzBasic: [AUSKLAPPEN] Repeat (btw. von Delay ![]() wird ungefähr einmal pro Sekunde die Funktion RecvMsg aufgerufen. Diese schaut aber nur nach der ersten Nachricht. BlitzBasic: [AUSKLAPPEN] Function RecvMsg() ;Empfängt die Nachrichten und verarbeitet sie :3 Wenn sie nach allen Nachrichten schauen soll, musst du diese in einer Schleife verarbeiten: BlitzBasic: [AUSKLAPPEN] Function RecvMsg() ZEVS |
||
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe es probiert und es geht leider immernochtnicht...
Und ich weiß das ein Timer besser ist ![]() Ich habe Delay nur zu testzwecken drinne ![]() Mfg |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
also.
lass das delay verwende es nie wieder um irgendwie etwas zu stoppen oder zu verlangsamen. ![]() Das problem dabei ist das es wirklich das programm anhält.. das willst du aber zu keinem zeitpunt ![]() nutze dafür einen ganz normalen timer... Code: [AUSKLAPPEN] Global Game_Timer = createtimer(60) Code: [AUSKLAPPEN] ;main loop mit verzögerung... while not keyhit(1) cls waittimer(Game_timer) flip 0 ; immer flip 0 !.. hast ja jetzt einen game timer wend Mir ist schon klar warum du mit delay arbeitetst.. du hast nicht verstanden wie debugging funktioniert. Also.. Schau dir den befehl debuglog an.. erstelle ein neues programm, und schreibe: i = 10 debuglog "Wert" + i i = i +10 debuglog "Wert neu " + i starte das programm im Debugmodus.. und wärend das programm noch offen ist, kannst du hinten in der IDE auf Debuglog klicken... Da ist so ein reiter... und da wird in echtzeit "mitgeloggt". Nun wirst du überall schön debuglog in deine Software einbauen.. und beginnst bitte damit sauber dein programm während es läuft zu debuggen. Dann wirst du auch ganz schnell finden wo der fehler ist. Meine erste vermutung aus dem Bauchraus ist, dass du irgendwo den stream nicht vollständig ausliest oder schlichtweg 0er sendest. (Nutze debuglog und lasse dir in echtzeit anzeigen was ausgegeben wird) bitte entschuldigt meinen plumpen schreibstil, ist nich böse gemeint. ~Achja.. stürzt ein programm mit nem MAV ab.. kannst totzdem in der Debuglog nachgucken in welcher zeile das programm abkackt.~ du schreibst "ich habe es probiert".. bitte gebe uns eine zeile code.. in der wir sehen können was du da probiert hast. Gerne auch mit deinen Gedanken gängen, so lenste am ehesten weil dich leute auf einen fehler ansprechen. ~Noch ein Tipp~ willst du sever und client gleichzeitig debugen .. musst du blitz 2 mal starten. Und jeweils das programm im debugmodus starten. Achte darauf das das Server Fenster und client fenster sich nicht überlappen. Führt zumindest bei mir zu bugs.. Sprich es aktualisiert die fenster nicht.. |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay Debugmodus ist bei mir permanent an falls es ben Error gibt weis ich dann immer direkt in welcher Zeile ![]() Aber auf die Idee mit alles mitloggen und schauen wo er sendet/empfängt bin ich nicht gekommen ![]() Das mit ich habe es probiert war von dem was er gelistet hat das ich in der Funktion eine repeat ... Forever Schleife aufrufen Sollte damit er das perma durchsucht ![]() Bin grad nicht am PC sondern am tablet nochmal zum delay wenn delay warten lässt werden dann trz noch UDP Daten empfangen ? Oder ist der Server dann im Prinzip offline für die 1 Sekunde ? Benutze normal auch timer aber hier wollte ich zum testen erstmal delay nehmen damit ich schnell und ziemlich genau von MS her die Wartezeit einstellen kann.... Dachte das delay nicht benutzt werden sollte Wells veraltet ist und die CPU 100% auslastet >.> stört mich bei solchen Testzwecken eig. Am wenigsten wenn der Rest nicht klappt ![]() Naja ich probiere es heute abend oder morgen früh mal PS: Der Code kann so 1:1 kopiert werden vllt. Liegts bei mir ja am Betriebssystem wäre nett wenn einer das bei sich mal Testen kann Mfg EDIT: Okay habe jetzt Timer gändert an Delay lags schonmal nicht ![]() Er sendet bei beiden Clienten die Daten richtig ab aber aus irgendeinem Grund verarbeitet er nur die Daten vom zuerst eingeloggten...:/ EDIT2: Kann ich irgendwie überprüfen ob der Stream versendet wurde ? weil sendet=Sendudpmsg.... geht nicht hätte sonst sendet auf True oder False überprüft im Internet hab ich bissher noch nix dazu gefunden...:/ |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Bobo: Die meisten Leute hier haben ihren eigenen Code zu debuggen. Debuggen ist der Hauptteil des Programmierens. Mal schnell sich was ausdenken und in nicht-funktionierendem Code hinklatschen ist keine Kunst. Das Debuggen und den Code zum Laufen kriegen ist die wirkliche Arbeit. Was Dottakopf da schreibt ist die Hälfte des Debuggens: sich überall alles loggen lassen, was irgendwie mit dem Problem zusammenhängen könnte.
Die andere Hälfte hängt mit dem Stop-Befehl zusammen. Stop pausiert das Programm an der Stelle wo Stop steht und übergibt die Kontrolle dem Debugger. Dort kannst du dann Befehl für Befehl durch den Code gehen und dir Live anzeigen lassen, was sich in jeder Variable befindet. Bist du damit fertig kannst du das Programm dann auf einen Klick im Debugger wieder weiterlaufen lassen. Weißt du, sich generelle Anregungen und Hilfe holen ist voll ok. Sich spezielle Hilfe zum Code holen geht grad noch. Andere Leute darum bitten dein Programm auszuführen und zu debuggen ist anderen Leuten deine eigene Arbeit aufdrängen. Entweder du willst programmieren (das inkludiert debuggen, Dokumentationen und Tutorials wälzen und viel googlen) oder du willst es nicht. Tu es, oder lass es. Aber mach nicht den interessanten Teil (grundlegende Programmstruktur hinklatschen) und dräng die Drecksarbeit den Anderen auf. Falls du das willst steht mein ursprüngliches Angebot immer noch. €40 die Stunde und ich schreibe/debugge dir deine Programme. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ne danke DAK
ich hab ja nicht gemeint das sies Debugen sollen ... Nur ka benutze WinXp und das hat gernmal seine Macken ![]() Der Server ist bei mir auch Kack Lam mitm Verbinden bei nem Kumpel dauert das Verbinden zum Server und auf Antwort warten max. 1-2Sek bei mir gerne mal an die 20-30sek und habe keinen EXTREM schlechte PC zwar nicht der beste aber 2GB Ram und 2,8Ghz CPU reicht dafür denke mal aus ![]() Naja ich probiers mal weiter ;D Mfg |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
in beiden punkten muss ich DAK recht geben. Es klingt blöd aber der code ist bereits zu "komplex" als das man ihn hier 35 min genau durchchecken möchte und dann sicher sagen kann --> hier muss xYZU stehen.
nochmal... ![]() ![]() ![]() Der Timer verhindert das dein programm 10 0000 mal die sekunde die schleife durchläuft. Glaub mir das tut dem speicher nicht gut. Und das Programm funktioniert so auch nicht. Createtimer 60 lässt dein programm mit maximal 60 Frames(Durchgänge) pro Sekunde updaten. Diese drosselung reicht fürs erste mal total aus.... sonst möchte ich dir folgende tipps geben. - server startet.. - server horcht auf Port ob eine MSG kommt - client startet - client baut stream auf und sendet 1mal ein Hallo... (MSG=1) - server lauscht und erhält ein "Hallo" (MSG=1) - Server erstellt neuen spieler, Server antwortet dem client sofort mit einem Willkommen und den Informationen der bereits sich auf dem befinlichen Spieler - Server Schreibt ein "neuer Spieler" an alle anderen bereits bestehenden Spieler(MSG=5) - client ist nach senden "Hallo" (MSG=1) am lauschen und wartet auf ein Willkommen mit Infos des servers - client laust solange bis Willkommen MSG=5 von server erhalten wurde oder Timeout(Prüfung durch Millisecs) erreicht wurde. Programiere ein programm das erstmal nichts anderes als das macht. Ohne Delay.. oder sonstigen overhead. Schreibe alles gleich als Writeline.. um zum testen zu vermeiden das du irgendwo eine byte schreibst aber ein "line" erwartest. Schreibe ein "Debuglog" bei allen ereignissen auf du die wartest oder du die 1 mal verschickst.. es ist nicht korrekt wenn du in jedem schleifen durchgang ein Debuglog schreibst... (Spame nicht deine log zu) wenn das funktioniert erweiterst du das programm... zum beispiel wenn ein spieler den server verlässt(MSG=99) UDP verliert gerne mal ein packet. Sollstet du alles lokal auf einer maschine machen ist das extrem unwarscheinlich. Trotzdem sollten die ersten Willkommens daten immer mit tcp übertragen werden. TCP ist verlustfrei Es ist mir ein bisschen peinlich, aber ich bin in dieser old school netzwerk proggerei nicht mehr drin. Verwende nur noch die Netzwerklib Lama von Toeb die alles für einen Managed. Versuche nicht die Lib zu laden und zu denken anschalten und funtzt. Die downloads der lib sind buggy !! ich besitze eine funktionierende LAMA3(aktuell gibts nur die lama2) und einen eigenen Master server. bekomm das zum laufen.. sende mir n funzendes beispiel und ich geb dir ne überarbeitete funktionierende LAMA Lib in der alles super easy ist. .. toll nicht ? ![]() |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also soll ich NOCHMAL von neu anfangen ? ;D
Naja dann mach ichs mal so alles Schritt für Schritt neu ... Ich verstehe diese Libs nicht hatte mal die SimpleUDP Lib probiert und nix verstanden was ich da machen soll in PHP wenn ich da ne Lib nehme/schreibe dann in OOP und dann einfach die gewünschten Funtkionen aufrufen aber die SimpleUDP lib habe ich nichtmal verstanden welche Funktion ich jetzt wo und wann brauche als ich se mir ne Stunde angeschaut habe xD Unter ner Lib verstehe ich solche funktionen CreateStream() WaitForAnswer() oder sowas halt und nicht MasterServerIrgendwas() Damit kann ich persönlich nix anfangen ![]() Lieber versuche ichs selbst zu schreiben anstatt das ich 3 Jahre brauche ne Lib zu verstehen ![]() Mfg PS: Nicht das die Lib schlecht ist nur ich komme damit nicht klar ![]() Allgemein mit Libs in B+ und BB nicht :/ |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
ohne die lib würde ich nicht kein netzwerk projekt mehr starten.
genauso wie ich ohne die Draw3D nichtmal mehr mit bb proggen würde.... Hectic.. mein held ![]() |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Haha ![]() Würde ich die libs verstehen würde ich sie wahrscheinlich auch benutzen ![]() Mfg |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einarbeitungszeit gehört halt dazu. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bobo2040 hat Folgendes geschrieben: Ne danke DAK
ich hab ja nicht gemeint das sies Debugen sollen ... Nur ka benutze WinXp und das hat gernmal seine Macken ![]() Der Server ist bei mir auch Kack Lam mitm Verbinden bei nem Kumpel dauert das Verbinden zum Server und auf Antwort warten max. 1-2Sek bei mir gerne mal an die 20-30sek und habe keinen EXTREM schlechte PC zwar nicht der beste aber 2GB Ram und 2,8Ghz CPU reicht dafür denke mal aus ![]() Naja ich probiers mal weiter ;D Mfg Nur zur Info: BlitzBasic wurde im September 2000 veröffentlicht. Wenn man bedenkt, dass Windows 2000 da gerade mal 10 Monate am Markt war (und ME noch kürzer), wurde es wahrscheinlich für Windows 98 und Windows NT 4.0 entwickelt. Computer zu der Zeit haben sowas gegen 64 MB - 128 MB RAM gehabt. Ein Durchschnittsrechner war damals ein Pentium II mit 500 MHz. Das Feinste vom Feinsten war ein Pentium III mit 1.4 GHz und die hat sich keiner leisten können. Das ist wofür BlitzBasic gemacht ist. Wenn deine Maschine dein Spiel nicht packt, dann liegt es nicht an dem Gerät sondern an deinem Code. Außerdem: je weiter das verwendete Windows von dem Windows entfernt ist, für das BlitzBasic programmiert wurde, desto schlechter läuft es. Rennt es auf XP nicht, dann wird es auch auf Vista, 7 und 8 nicht gehen. Von den in Blitz eingebauten Funktionen gibt es eine Handvoll die nicht mehr richtig funktionieren oder verbuggt sind (siehe hier). Das sind hauptsächlich ImagesCollide und ImagesOverlap. Alles andere funktioniert. Anfänger schieben Fehler gerne auf den Computer, ihr Windows, das Framework, die Library, das Wetter und die momentanen Himmelskonstellationen. Wenn dein Programm nicht funktioniert, dann kannst du dich mit beinahe sicherer Wahrscheinlichkeit darauf verlassen, dass der Fehler in deinem Code steckt. Immerhin schaffen es ja auch alle anderen mit den gleichen Geräten und der gleichen Software fehlerfreie Programme hinzukriegen, und das schon seit fast 14 Jahren im Falle von BB. Beinahe jede mögliche alte Software/Hardware-Kombination ist von einem der 18.000 Nutzer, die sich auf der BlitzBasic.com-Seite finden ausprobiert worden. Bobo2040 hat Folgendes geschrieben: Also soll ich NOCHMAL von neu anfangen ? ;D Kannst du dich erinnern, was ich dir ganz am Anfang geschrieben habe? DAK hat Folgendes geschrieben: Aus eigener Erfahrung und den Erfahrungen von wörtlich hunderten anderen Hobbyprogrammierern vor dir (ich bin seit 2005 hier im Forum und in der Zeit habe ich SEHR viele Leute gesehen, wo das so rennt): Wenn dir dieses Spiel am Herzen liegt, und du es wirklich machen willst, dann leg es zur Seite, mach ein paar (mindestens 5) Minigames und kleinere Spiele, und dann schau es dir noch mal an, ob du es dir dann zutraust.
Was du da machen willst ist ein Megaprojekt. Die 100 Stunden, die ich da mal grob vorgeschätzt habe, sind für einen erfahrenen Programmierer, der das schon seit Jahren macht, und weiß was er tut. Für dich, als Neuling, sind es wohl eher (realistisch, nicht böse) geschätzt 500-1000 Stunden. Du wirst dein Projekt versuchen aufzuziehen, dabei viel lernen, aber auch ein grauenhaftes Chaos aus deinem Projekt machen. Du wirst neue Sachen lernen, aber da es dann schon zu viel Arbeit ist, etwas zu ändern, wirst du den Rest deines Projekts dich durch den grauenhaften Code kämpfen müssen, bis du irgendwann an einem Punkt stecken bleibst, wo deine schlechte Vorarbeit dir den weiteren Weg versperrt. Dann wirst du das Projekt entweder aufgeben, oder wenn du wirklich die Disziplin hast, es einstampfen und komplett neu schreiben. Darum: Wenn dir das Projekt am Herzen liegt, leg es bei Seite. Vielleicht hörst du ja inzwischen auf gute Ratschläge: Bau ein Spiel, das deinen Fähigkeiten entspricht. Ein Spiel, wo du nicht auf Anhieb ein halbes Dutzend Frameworks einlernen muss. Dann bau ein Spiel, wo du ein kleines bisschen dazu lernen musst. Und so weiter. Bau fünf kleine Spiele, dann hast du vielleicht das gelernt, was du brauchst um ein Großes anzufangen. Fang mit was kleinem an, einen wirklich schönen Pong-Klon oder so. Habe ich auch gemacht. Es motiviert ungemein auch nur was Kleines fertig zu machen. Dann mach einen Spaceshooter oder ein Jump-N-Run. WoW 2 / Dark Orbit 2 kannst du immer noch machen wenn du das kannst. So rennst du dir dauernd den Kopf ein, weil du Sachen lernen musst, die dir noch Monate oder Jahre zu hoch sind und kriegst nichts zu stande. Das demotiviert und nervt alle anderen mit. Und was Libs angeht: Wenn du an BNetEx scheiterst, dann gute Nacht. Und wenn du diese Befehle haben willst, die gibt es fast 1:1 im Standard-Blitz. Ich hab letztens für die Arbeit ein Framework gebraucht um Telnet und SSH zu verarbeiten (unter Java). Ich habe zwar eine Lib gefunden, die beides kann, habe aber im Endeffekt den Telnet-Teil großzügig umschreiben und den SSH-Teil komplett durch eine andere Lib ersetzen müssen, weil sie nicht ganz auf das gepasst hat, was ich gebraucht hab. Habe dabei auch gleich beides stark optimiert, so dass die Lib jetzt einen Kleinteil der Ressourcen von davor braucht. Wenn du es nicht schaffst durch den Source von den Beispiel-Dateien zu steigen, dann ist das der Zeitpunkt um einen Schritt zurück zu machen, was anderes anzufangen und hier her zurück zu kommen, wenn du so weit bist. Sorry für die Länge von diesem Post, aber es hat mal wieder raus müssen. Edit: Die Zeit die ich in meinem Zitat da vorgeschätzt habe ist bei weitem zu niedrig angesetzt. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay ja so waage kann ich mich dran erinnern ![]() Naja so halb ist ja das Spiel mittlerweile ok ... klar ist nicht das beste hier und da nen Paar Bugs etc. aber ich werde es wahrscheinlich eh neuschreiben weil ich wie gesagt mittlerweile an nem punkt bin wo ich ins stottern komme und hier was zu machen muss ich erstmal 200 zeilen code abändern (bisschen übertrieben ![]() ![]() Sondern am können bleib ich hängen ... Und nochmal zum Thema wegen OS etc ich meinte nicht das mein XP dafür nicht geht oder gar das Spiel nicht flüssig läuft, was es tut jedoch ists nunmal so das der Server und allgemein Verbindungssachen TCP und UDP ziemlich langsam bei mir laufen...auf dem Rechner von nem Kumpel aber schnell sind ![]() Mfg Nochmal ne Frage zu TCP: Du meintest ich solls mit TCP machen also das Willkommen, also das er Connecten kann/darf wie bekomme ich aber die IP und Port von ihm raus ? Geht das in TCP überhaupt ? Will ja die Daten dann direkt für UDP benutzen damit er nicht nochmal ne Anfrage starten muss... ![]() |
||
- Zuletzt bearbeitet von Bobo2040 am Fr, Feb 14, 2014 15:46, insgesamt einmal bearbeitet
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay.
Ich muß DAK Recht geben. Ich wollte auch immer das super duper Megaprojekt programmieren. Doch letztendlich nach Jahren habe ich kapiert das ich vorher un mengen Testprogramme schreiben muß. Jedes einzelne System ob es nun GUI (Bediensysteme) KI, Datensysteme (Spielstand Speichern Laden usw) Pfadfinding oder auch Wirtschaftssysteme sind, müssen vorher schon einmal Programmiert worden sein. Und diese Systeme selbst können wiederum Fehler aufweisen. Selbst wenn sie Fehlerfrei sind gibt es noch Möglichkeiten sie zu beschleunigen oder dafür zu sorgen damit sie weniger Speicher verbrauchen. Du muß erst einmal mindestens 80% der Blitzbasic Befehle schon einmal benutzt haben, damit du weißt welche Möglichkeiten du hast. Vor allem Types und Banken sind Wichtig. Manchmal denkt mann der Code ist Top und erst viel später merkt mann das mann sich doch verfranst hat. Dann muß mann neu Anfangen, und der Code war umsonst. Doch mann hat gelernt. Und darauf kommt es an. Es ist noch kein Meister vom Himmel gefallen. Programmieren ist lernen. Lernen durch Fehler. ![]() |
||
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay ![]() hatte davor die Ai (immer nur 1 Ai pro Map) in ner Globalen Variable gespeichert und mit ner Funktion einen neuen Erstellt falls der Alte Tod war... Jetzt habe ichs mitm Type gelöst und gehen viel mehr sachen mit ![]() Also kann mehrere Ais auf einmal erstellen ![]() Davor habe ich nicht soo viel von Types gehalten - hab sie nicht verstanden jetzt benutze ich sie wos sinnvoll ist ![]() Mfg |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Ins Stottern kommen / 200 Zeilen Code für Kleinigkeiten ändern müssen:
Das ist genau was ich gemeint habe. Du hast den Code begonnen, wie du noch deutlich weniger gekonnt hast als jetzt und ihn nicht von Anfang an gut durchdacht. Dieses mal schnell drauf los schreiben sorgt zwar dafür, dass du am Anfang unheimlich schnell voran kommst (da du keine Zeit für Planung u.Ä. aufwendest), dafür wird es dann später extrem anstrengend. Funktioniert gut bei Projekten die in 2 Wochen fertig sind und wo du dir den Code nie wieder anschaust, aber bei allem was länger braucht ist das eine absolute Katastrophe. Projektdesign will genauso gelernt sein wie das Programmieren selbst. Und das lernt man nur, wenn man viele Projekte designt. Hier auch wieder: viele kleine Projekte sind zum Lernen besser als ein Großes. Was noch dazu kommt ist dass sich der Programmierstil während der Lernphase stark ändert. Der Code auf den man vor einem Monat noch stolz war macht einem jetzt das Leben schwer. Auch hier wieder: je größer das Projekt desto mehr Codeleichen schleift man mit, die einem die Arbeit schwer machen. Du hast noch Zeit genug für dein Megaprojekt. Mach zuerst mal ein paar coole kleine Spiele. Es ist keine Schade ein Projekt aufzugeben oder auf später zu verschieben, wirklich nicht. @Langsam bei dir, schnell bei anderen: Klar dass ein schnellerer PC Sachen schneller machen kann. Auf einem Supercomputer läuft auch absolut ineffizienter Code recht flott (rein nach "mit genügend Geschwindigkeit fliegt auch ein Scheunentor"). Auf der anderen Seite machst du ja wirklich nichts rechenintensives. Wenn man bedenkt, dass z.B. Age of Empires, das für Computer mit 90 MHz, 16 MB RAM und Modems mit 28.8 kbit/s gemacht wurde, 1500 Einheiten per Internet-Spiel verarbeiten konnte, dann kann es nicht an deinem Computer liegen. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin,
ich muss hier mal eben noch was zum Delay sagen. Ja es ist teilweise unschön, und ich kenne auch den Hurra 100% Auslastungs Thread, aber zumindest bei mir in der aktuellsten Version von Blitz3D kann ich nicht sagen, dass Delay wirklich schlecht ist. Es lastet die CPU nicht zu 100% aus. Ein Delay gibt genauso CPU Zeit frei wie der Timer. Im schlechtesten Fall wartet der auch einfach stumpf bis zum nächsten Tick ab. Folgende Codes machen exakt das gleiche: BlitzBasic: [AUSKLAPPEN] Graphics 1920,1080,32,1 BlitzBasic: [AUSKLAPPEN] Graphics 1920,1080,32,1 Der einzige wirkliche Unterschied ist, dass der timer quasi ein delta fürs warten ausrechnet und nur so lange oder auch garnicht wartet. So ungefähr: BlitzBasic: [AUSKLAPPEN] Graphics 1920,1080,32,1 Es mag sein, dass in älteren BB Versionen das Delay wirklich die CPU auf 100% gebracht hat und es deswegen in so vielen Köpfen festsitzt. Aber die Zeit "selbst aufteilen" wie ich hier immer wieder lese tut der Timer gewiss nicht. - - - - - Zum aktuellen Problem, wenn dein Code so wie oben gepostet, lauffähig ist, dann vereinfache ihn nur auf das connecten, und vermitteln von einem Integer oder sonstwas zwischen den Clients. Dann findest du leichter den Fehler und auch Leute, die deinen Code kurz durchsehen. Ansonsten DebugLog wurde ja schon erwähnt. lg, Count-Doku PS. Ich könnte auch wieder was zu den Netzwerklib Empfehlungen schreiben, dass lasse ich hier jedoch. |
||
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja habs gemerkt ![]() ![]() Ich bin mit meinem Projekt so halb auf die Schnauze gefallen wie 1000 andere vor mir ![]() ![]() Mittlerweile schreibe ich mir sachen Funkttionen die in mein Darkorbit Clon kommen immer zuerst aufn Blatt papier und mache ne art Mindmap dazu... was brauche ich? Wie wird es unterbrochen? Was für Datensätze werden benutzt? Solls später falls der Server steht mit versendet werden... etc ![]() Naja das Projekt LightOrbit ist momentan erstmal Tod aber den Server probiere ich trz nochmal neu zu schreiben so wies Dottakopf gesagt hat mit TCP und UDP gemischt und alles Schrittweise und dabei alles Debuggen... In meinem Darkorbit Clone hätte ich Jetzt NICHT mehr die nerven zu Debuggen bei mittlerweile 35k Zeichen ![]() Dazu will ich aber Trz wissen ob ich mit TCP die Sende IP und Sende Port? herrausbekomme damit ichs direkt in ein Type reinmachen kann und dann nicht alles Doppelt machen muss weil UDP auch nochmal ne Bestätigung braucht ![]() Mfg EDIT: So ich habe jetzt mal so bisschen Angefangen und bin prompt auf ein Problem gestoßen das ich weder mit Debuglog noch mit Sufu lösen konnte :/ Hier erstmal mein Server bist jetzt nur eine Funktion drinne ![]() BlitzBasic: [AUSKLAPPEN]
Und hier der Client (nix großes) BlitzBasic: [AUSKLAPPEN]
Habe beide ziemlich viel mit dem Help beispiel aufgebaut , welches bei mir Funktioniert hat ![]() Aber das haut mir in der While ReadAvail() nen Invalid TCP Stream raus... Also habe ich TCPstream vor der Schleife in Debuglog geschrieben und siehe da es hat einen Wert also habe ich wirklich keine Ahnung was ich hier jetzt groß machen soll wenn ich die While Schleife auskommentiere, dann wird der Error bei username$=readline(TCPstream) ausgegeben... ClientStream und NewClient haben bei einen Wert also wird da eine Msg gesendet und auch so halb empfangen aber iwie passiert sonst nichts... :/ Mfg |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil du aus TCPStream ausliest und nicht aus ClientStream.
Dein TCPStream sollte eigentlich TCPServer heißen, da er kein Datenstream in dem Sinne ist. Der TCPStream ist nur dafür da zu erkennen, wenn sich jemand neues verbindet und wirft dann aus AcceptTCPStream den Stream zu dem Client raus. Jeder Client hat somit einen eigenen Stream (Ergebnis von AcceptTCPStream) über den der Server mit dem einen Client redet. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group