Laden...

Eigene Objekte per TCP verschicken

Erstellt von Misery vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.189 Views
M
Misery Themenstarter:in
22 Beiträge seit 2006
vor 17 Jahren
Eigene Objekte per TCP verschicken

Ja ich hab es jetzt mal endlich gebacken bekommen 😁

Verbindung aufgebaut, Authentifizierung abgeschlossen, etc. 8)

Nuuur... Wie verschicke ich am besten meine Daten aus eigenen Klassen. 🤔

Verbindung wurde mit TcpClient aufgebaut. Und primär verschicke ich die Daten über BinaryWriter und BinaryReader!

Wie würde ich nun ein Objekt einer eigenen Klasse verschicken?

Gruß und vielen Dank für jeden Hinweis im Vorraus 🙂,
Daniel

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
indem Du die Klasse serialisierst, z.B. mit nem BinaryFormatter, Stichwort Serialisierung, ISerializable, SerializableAttribute.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
Misery Themenstarter:in
22 Beiträge seit 2006
vor 17 Jahren

Vielen Dank für das Stichwort ...

Ich werd mich sofort an das Thema setzen 🙂

4.506 Beiträge seit 2004
vor 17 Jahren

Hallo Misery,

eventuell ist auch Remoting ein Stichwort hierfür. Man kann aber über dessen Verwendungszweck streiten. Ich selbst habe keine Probleme mit Remoting.

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

M
Misery Themenstarter:in
22 Beiträge seit 2006
vor 17 Jahren

Ich hab mir gestern mal ein wenig Serialisierung angesehen (leider nicht genug Zeit gehabt um es komplett zu testen) und es sieht zum einen sehr einfach aus und zum anderen erfüllt es genau das, was ich machen will.

Remoting sagt mir aber auch noch nichts und ich werd es mir auch mal anschauen! Dankeschön!

S
8.746 Beiträge seit 2005
vor 17 Jahren

Bei Remoting wird sowieso Serialisierung eingesetzt (Binary- oder SoapFormatter). Der Vorteil ist nur, dass der ganze TCP-Kram wegfällt.

Remoting ist in jedem Fall der einfachste Weg.

M
Misery Themenstarter:in
22 Beiträge seit 2006
vor 17 Jahren

Dann schau ich mir das auf jeden Fall nachher mal an.

Hört sich auf jeden Fall brauchbar an 🙂

Dankeschön!

3.170 Beiträge seit 2006
vor 17 Jahren

@svenson

Original von svenson
Bei Remoting wird sowieso Serialisierung eingesetzt (Binary- oder SoapFormatter).

aber dafür muss die Klasse doch ebenfalls serialisierbar sein oder täusche ich mich da?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
8.746 Beiträge seit 2005
vor 17 Jahren

Genauso ist es. Aber ich vermute mal, mit dem "aber" willst du auf irgendwas hinaus...

3.170 Beiträge seit 2006
vor 17 Jahren

@svenson
wollte nur sichergehen, daß ich da nicht irgendwelchen mist verzapft habe.
das aber hat dabei eigentlich nix zu bedeuten 😉

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

4.506 Beiträge seit 2004
vor 17 Jahren

Hallo MarsStein,

das aber hat dabei eigentlich nix zu bedeuten

eigentlich

--> Du reitest Dich immer mehr in die Sch* 😁 😁

*grins*

Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

3.170 Beiträge seit 2006
vor 17 Jahren

Original von norman_timo
--> Du reitest Dich immer mehr in die Sch* 😁 😁
Norman-Timo

freitag mittag -> hirn fährt schon runter 😁

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

2.921 Beiträge seit 2005
vor 17 Jahren

Ich hab mich mal an das Problem gemacht, weil jemand bei uns dachte, es ginge nicht. ca. 1,5h später hatte ich dann das komplette wiederverwendbare mini-framework um Objekte übers Netzwerk zu verschicken beisammen.

Zur vorgehensweise: Objekt bestimmen, das serialisiert werden soll.
Dessen Klasse muss mit XML-Serializer-Attributen versehen sein.

Erweiterter XML-Serializer hat die Methoden Box und Unbox.
Box serialisiert den Stream.
Unbox konvertiert ihn wieder zurück.

Definition der Rümpfe:

bool Box(object _objectToSerialize);
object Unbox(string _sString);

mit

        CClass myTempClass = (CClass)m_XmlSerializer.Unbox(m_XmlSerializer.GetBufferAsString());  

kann dann das ganze wieder zurückgewandelt werden.

Hier ein Beispiel für die Klasse die serialisiert werden soll:


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace CXmlSerializerTest
{
    [Serializable]
    [XmlRootAttribute()]
    public class CClass
    {
        public CClass()
        {
        }

        public CClass(string _sName)
        {
            Name = _sName;
        }

        [XmlAttribute]
        private float m_fTimeInterval = 3.6f;

        [XmlAttribute]
        private string sName = "Hallo";

        public string Name
        {
            get { return sName; }
            set { sName = value; }
        }

        [XmlAttribute]
        public string sTest = "blub";

        [XmlAttribute]
        private int nValue = 0;

        [XmlAttribute]
        private string sTest2 = "blub2";

        public int Value
        {
            get { return nValue; }
            set { nValue = value; }
        }
    }
}

Und es funktioniert wunderbar. Leider kann ich hier kein Beispiel für den Code einfügen, da dieser für unsere Firma verwendet werden soll und wohl auch wird.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.