Array Ofset und Count in ein Byte Array Inplementieren?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

    und nochmal nochmal: Ein Stream kann kein Protokoll umsetzen, denn ein Stream kennt nur Bytes.
    Das Protokoll bezieht sich aber auf andere Datentypen als auf Bytes.
    Einen <Cocaine Data Protocol tunnling Stream> kann es also nicht geben.

    Also mach sowas:
    <Cocaine Data Protocol tunnling Writer>--<Network Stream-->---<IP>--<Netowrk Stream>--<Cocaine Data Protocol Tunnling Reader>

    Deine Probleme mit den Overrides rühren glaub daher, dass du ein Konzept verfolgst, das schlicht nicht aufgeht.
    Hallo,

    Aber letzendlich geht es ja nur darum Bytes zu übertragen. Habt ihr vlt ein Tutorial zur Stresm Endwicklung??

    LG, Herbrich
    Also Bytes übertragen, das macht - wenn übers Internet übertragen werden soll - der NetworkStream.
    Den Networkstream brauchste nicht entwickeln, denn den gibt's ja schon.

    Was ich dir seit glaub 8 Posts klarzumachen versuche ist, dass dein Problem nicht das Übertragen ist - denn dafür gibt's ja schon den Networkstream, sondern es geht ums Übersetzen.
    DatenObjekte gemäß deines Protokolls müssen übersetzt werden in Bytes, die Bytes dann übertragen (macht der Networkstream), dann rückübersetzt.

    Reader und Writer sind gewissermaßen Übersetzer gemäß eines bestimmten Protokolls.
    Ein XmlReader/Writer übersetzt XML-Code<->Bytes, ein StreamReader übersetzt Text<->Bytes, ein BinaryReader/Writer übersetzt verschiedene Datentypen<->Bytes.
    Ein Writer/Reader übersetzt also Datenobjekte<->Bytes und schreibt sie gleich in einen Stream (den er per Konstruktor mitgegeben bekommt).

    Vlt. erstellt dein KokainWriter intern einen BinaryWriter, und stellt nach aussen eine Sub WriteFile bereit (angenommen FileTransfer entspricht deinem Protokoll), die iwie ein FileTransferProtokollItem entgegennimmt, und intern dann entsprechende Daten mittels des BinaryWriters in den Stream writet.
    Hallo,

    Letzendlich geht es ja darum Bytes zu übertragen, nur problem ist das der Server wissen muss was da gerade reinkommt. Und darfür habe ich ein Protokol geschrieben.

    So, ziel ist es mit Writer, Serialisierern, Reader, usw... das ding benutzen zu können, also könnte ich dann rein Theoretisch ein Memorystream in einen Writer schicken der die Daten in ein NetzwerkStream schreibt. Es geht Defakto darum ein Stream in einen Stream (Starck vereinfacht^^) übertragen zu können. Naja, die Bytes eben.

    LG, Herbrich
    <p>Hallo,</p>

    <p>Der Memorystream war nur ein beispiel, nat&uuml;rlich kann es auch ein FilleStream oder sonstwas sein, hauptsache ich kann Streams direkt durch jagen.</p>

    <p>Und seid wann bitte kann ein selbstinplementierter Stream nicht einfach bei der Write Metohde Bytes hinzuf&uuml;gen oder enpfernen?? Also klar kann man ein Protokol in einen Stream inplementieren, schli&szlig;lich ist der Cryptop und der gZip Stream ja auch Manipulativ oder nicht??</p>

    <p>LG, Herbrich</p>
    Crypto- und Gzip-Stream transportieren nur Bytes, und verwursten die - nachdem sie konfiguriert sind - auf genau eine einzige, einheitliche Weise. Da kann kein Missverständnis auftreten zwischen reinschreiben und auslesen.

    Verschiedene Befehle eines Protokolls müssen aber vermutlich auf verschiedene Weisen behandelt werden.

    Aber vlt. irre ich auch.
    Tatsächlich weiß ich nicht genau, was du meinst, wenn du sagst, du hättest ein Protokoll programmiert.
    Hallo,

    Ich übergebe der Stream Klasse einfach eine SubNew(ByVal c as IHerbrichNetworkController) und da drinnen befinden sich wiederum weitere Methoden Die Frage ist inprinzip recht sinpel. Ich suche eine beispiel Inplementierung für die Stream Klasse, Ofset berechnen und so habe ich ja inzwischen drauf. Ahja, und wie stelle ich es an dass der Stream kein Ende hat.

    LG, Herbrich
    werd glücklich mit:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class MyStream : Inherits Stream
    3. Private _BaseStream As Stream
    4. Public Sub New(ByVal baseStream As Stream)
    5. _BaseStream = baseStream
    6. End Sub
    7. Public Overrides ReadOnly Property CanRead As Boolean
    8. Get
    9. Return _BaseStream.CanRead
    10. End Get
    11. End Property
    12. Public Overrides ReadOnly Property CanSeek As Boolean
    13. Get
    14. Return _BaseStream.CanSeek
    15. End Get
    16. End Property
    17. Public Overrides ReadOnly Property CanWrite As Boolean
    18. Get
    19. Return _BaseStream.CanWrite
    20. End Get
    21. End Property
    22. Public Overrides Sub Flush()
    23. _BaseStream.Flush()
    24. End Sub
    25. Public Overrides ReadOnly Property Length As Long
    26. Get
    27. Return _BaseStream.Length
    28. End Get
    29. End Property
    30. Public Overrides Property Position As Long
    31. Get
    32. Return _BaseStream.Position
    33. End Get
    34. Set(ByVal value As Long)
    35. _BaseStream.Position = value
    36. End Set
    37. End Property
    38. Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
    39. Return _BaseStream.Read(buffer, offset, count)
    40. End Function
    41. Public Overrides Function Seek(ByVal offset As Long, ByVal origin As System.IO.SeekOrigin) As Long
    42. Return _BaseStream.Seek(offset, origin)
    43. End Function
    44. Public Overrides Sub SetLength(ByVal value As Long)
    45. _BaseStream.SetLength(value)
    46. End Sub
    47. Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
    48. _BaseStream.Write(buffer, offset, count)
    49. End Sub
    50. End Class
    Hallo,

    Ja gut, macht Theoretisch ja auch sin, nur die Frage ist halt eben nur CanSeek ist für NetzwerkStreams doch umgeignet weil kein Ende, beizhungsweise das Ende nicht abzsuehen ist da das Ende gleich das Schlißen des Socets ist?

    LG, Herbrich