TSocketStream - wann sind Daten vorhanden?
Übersicht

PhillipKBetreff: TSocketStream - wann sind Daten vorhanden? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Heyho!
Vorweg: Ich weiß, es gibt Netzwerklibs. Und ich weiß, das diese vieeel einfacher sind, als selbst was zu schreiben. Aber mal ehrlich: WAS lerne ich denn damit? Garnichts! Und darum bin ich hier ![]() Jetzt, da mein BCC beitrag oben ist, kann ich mein Snakespiel verändern wie ich möchte. Das heißt erstmal: Netzwerktechniken lernen und im Snakespiel evtl eine Netzwerkanbindung reinbringen. Hier stoße ich aber, wie zu erwarten war, direkt auf ein Problem ![]() Vorher habe ich mit einem mod namens TNet (oderso?) meine Netzwerkschnittstellen gebastelt und hab mich Ziemlich daran gewöhnt. Nach kurzem suchen hier im Forum, kam ich auf einen ersten Hinweis, wie so ne Netzwerkverbindung aussieht. Ohne großes Vorwissen, hinein in die Schlacht! ![]() Ich musste schnell feststellen, wenn ich der Clientseite einen Integer in den Stream schreibe und auf der Serverseite einen Byte auslese, gibts einen Error (bla, streamlesen nicht möglich). Allerdings Integer zu Interger klappte. Was tun? Genau. Ein kleines Puffer-type schreiben, welches mir die daten in einen String (faulheit, optimaler wäre n richtiger Byte-array), schreibt und diese byte für byte einträgt. Auf der Gegenseite wird also wieder so n datenbatzen ausgelesen und per umkehrfunktion ausgelesen. Hierzu verwende ich flags innerhalb meines Datenbatzens: _int:Byte, _byte:Byte usw. Mein Code: BlitzMax: [AUSKLAPPEN] SuperStrict An sich hauts schon hin. Hier und da ein paar speedtests machen und abwägen, was einfacher/schneller ist. Was mehr effizienz bietet oder gar nen anderes Data-sammel-packet schreiben. Was mir aber größtes Kopfzerbrechen bereitet: wenn ich auf den Serverstream (wahrscheinlich auch auf den Clientstream? noch nicht getestet) eine der Readfunktionen ausführe, gibts .. nix. Verbindung blockiert (mein programm wartet wohl darauf, das endlich was zu Readen ist?) Folge ist ein Programmabsturz. Serverstream.Size() o.ä kann ich nicht auslesen, genausowenig wie EOF(Serverstream) - gibt mir beides immer 0. Das ganze habe ich sowohl als TStream wie auch als TSocketStream probiert ![]() Nun frage ich mich, wie stelle ich das am dämlichsten an? Andere netzwerklibs müssen so oder so etwas ähnliches machen und ich bin mir fast sicher, sie müssen Streams nutzen - wie wird im Optimalfall ein vorhandensein von Paketen überprüft? |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe nicht ganz, wieso du nicht weißt, was für eine Art Daten da kommen. Dafür gibt es doch Protokolle. Der Server weiß doch anhand der bisher gesendeten Daten, was für Daten er erwarten muss.
Damit haben sich in meinen Augen deine ganzen _* Variablen erledigt, genauso wie der Type TStreamPuffer. Somit sind von deinem Code nur noch Bruchstücke übrig, sodass ich mutivierend sagen kann: Falsches Konzept, mach es noch mal neu! Und wenn du Netzwerktechniken erst lernen willst, fang besser mit TCP an, das ist wesentlich einfacher und ist nur ein wenig langsamer. ZEVS |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hachja.. ich und meine ideen ![]() Aber du hast recht, ich habe ein wenig blauäugig Programmiert. Ich habe mich nun ein wenig mehr mit der TStream klasse befasst und erarbeite mit solangsam ein konzept ![]() Allerdings hat mir BNetEx als vorlage doch super dienste geleistet - hätte nicht gedacht, das der Code so schön kommentiert und übersichtlich gehalten ist. Ich denke, das werde ich zum lernen nutzen. (erst denken, dann forum posten *merk*) Entschuldigt :3 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group