BNetEx - Brauche Hilfe...

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

juse4pro

Betreff: BNetEx - Brauche Hilfe...

BeitragDi, Aug 03, 2010 2:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich habe folgendes Problem:
BlitzMax: [AUSKLAPPEN]
Import Vertex.BNetEx

Local stream:TUDPStream = New TUDPStream
stream.Init()

stream.WriteByte(1)
stream.WriteByte(10)
stream.WriteString("IchBinTot!")

Local size:Short = stream.SendSize
Print "Stream Buffersize: "+stream.SendSize

Local tmp:Byte Ptr
MemCopy(tmp, stream.SendBuffer, stream.SendSize)


stream.SendMsg(TNetwork.IntIP("127.0.0.1"), 12000)

stream.Write(tmp, size)

Print "Stream Buffersize: "+stream.SendSize
stream.SendMsg(TNetwork.IntIP("127.0.0.1"), 12000)
Print "Packet sended twice... just writting one."
End


in der Zeile:
BlitzMax: [AUSKLAPPEN]
MemCopy(tmp, stream.SendBuffer, stream.SendSize)


gibt's nen unhandled Expeption, warum? Der Code soll, ohne das paket 2x zu schreiben, den inhalt des Ausgangs-Puffers zwischenspeichern, um ihn gegebenenfalls nochmal in den Stream zu schreiben (erster Schritt Richtung abgesicherte UDP Verbindung Wink )

Bräuchte Hilfe ...

gruß: juse
Portfolio |LinkedIn |XING
 

n-Halbleiter

BeitragDi, Aug 03, 2010 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir jetzt gerade nicht sicher, ob du mit "CopyBytes" (in BRL.Stream) das Gleiche erzielen kannst, ich denke aber schon. So kannst du auch später dann mit "CopyStream" ohne Probleme die Inhalte wieder zurückschreiben. Auf diese Weise hast du auch den GC zu deiner Unterstützung, den du - meine ich - mit MemCopy nicht hast.
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

juse4pro

BeitragDi, Aug 03, 2010 2:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Check ich jetzt nicht ganz ... laut Doc gibts den Befehl CopyBytes garnicht

EDIT: Ohh doch... hab unter Methoden geguckt.. sorry ^^
EDIT2: Mit CopyBytes muss ich einen Source- und einen Zielstream angeben ... Also müsste ich pro zwischengespeichertes Paket einen neuen Stream anlegen, das ist nicht grade die Lösung Wink
Portfolio |LinkedIn |XING
 

n-Halbleiter

BeitragDi, Aug 03, 2010 2:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab' mir gerade BNetEx mal runtergeladen, um zu schauen, was es da gibt. Meine Idee (ich garantiere für nichts):BlitzMax: [AUSKLAPPEN]
SuperStrict

Import Vertex.BNetEx

Local PacketStream:TUDPStream=New TUDPStream'Hier kommen die Paketdaten rein
PacketStream.Init()

Local OutStream:TUDPStream=New TUDPStream'Da wird alles reingeschrieben, was rausgeht
OutStream.Init()

PacketStream.WriteByte(1)
PacketStream.WriteByte(10)
PacketStream.WriteString("IchBinTot!")

'Erstmaliges senden
CopyStream(PacketStream,OutStream)
OutStream.SendMsg(TNetwork.IntIP("127.0.0.1"), 12000)

Local fSent:Byte'Überprüfung, ob gesendet wurde

While Not fSent

'Erneutes Senden
CopyStream(PacketStream,OutStream)
OutStream.SendMsg(TNetwork.IntIP("127.0.0.1"), 12000)

'Neuüberprüfung
Wend
PacketStream.Flush()'PacketStream leeren, bei Bedarf wieder füllen


Für fSent musst du dir halt eine total knorke Überprüfung ausdenken, ob das Paket jetzt wirklich angekommen ist. Ich bin mir jetzt nicht sicher, ob das so funktioniert, aber man kann ja weiterprobieren. Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Thunder

BeitragDi, Aug 03, 2010 10:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls es noch nicht geklärt ist:
BlitzMax: [AUSKLAPPEN]
Local tmp:Byte Ptr
MemCopy(tmp, stream.SendBuffer, stream.SendSize)


Das funktioniert nicht, weil tmp nicht initialisiert wurde und daher im virtuellen Speicher auf 0 zeigt. Da der Speicherbereich mit großer Wahrscheinlichkeit nicht von deinem Programm beschrieben werden darf, gibt es einen Error.
Wenn du es auf die Weise machen möchtest, musst du vorher tmp mit MemAlloc initialisieren und nach dem Gebrauch (wenn du es gar nicht mehr brauchst) mit MemFree freigeben. Falls du es lokal in einer Funktion initialisierst musst du es in der Funktion vor jedem Return mit MemFree freigeben.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

juse4pro

BeitragDi, Aug 03, 2010 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@Halbleiter: Coole Idee, aber hier trirr das Problem auf, wie speicherer ich jetzt 2 Pkcete zwischen? Wink

@Thunder: Jo, cool, ich werde man versuchen es so umzusetzten
Portfolio |LinkedIn |XING
 

n-Halbleiter

BeitragDi, Aug 03, 2010 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch einen Stream erstellen, in den du den Inhalt des zweiten Paketes speicherst? Ich weiß nicht, wie speicheraufwendig das alles ist, aber es sollte nicht zu schlimm sein. Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

juse4pro

BeitragDi, Aug 03, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
bei einem Online-Server mit mehreren hundert Playern wird es doch ziemlich confus Wink
Portfolio |LinkedIn |XING
 

n-Halbleiter

BeitragDi, Aug 03, 2010 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem hast du - denke ich - mit der MemCopy-Variante auch, oder? Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

juse4pro

BeitragDi, Aug 03, 2010 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, hier brauch ich bloß nen Type anlegen, und die mit einer Liste auf diese Weise speichern... (ich weis, es geht auch so mit den Stream, aber ich finde es ist eine unsaubere Lösung... Ausserdem nehmen Stream mehr Speicher, als reine Datenblöcke Wink )
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group