Benutzer mit den meisten Antworten
Datenstrukturen in Klassen, Listen für Server, Client; Socket App.

Frage
-
Hallo,
ich habe eine C# Anwendung
App1.exe + App2.exe
ich habe eine C# Anwendung
App1.exe
und eine C++ Anwendung
App2.exe
Bitte:
Wie könnte ich schnell die Datenstrukturen in Klassen, Listen bringen. Was würde sich gut dafür eignen.
App1.exe mache ich neu. App2 gibt es für ein Produkt schon und ist in C++, deshalb die Socketgeschichte.
Alles soll zunächst in C# gehen, später soll die App1.exe auch App2.exe in C++ beliefern.
mein Ziel ist:
App1.EXE -- Server ----- SOCKET ----- App2.EXE -- Client´
UI
<--- Frage ("1001;SwitchOn;200,201,400,300,500"); Event, Asynchron!!!
Antwort ---> ("1001;ACK")
<--- Frage ("1002;GetContents");
Antwort ---> ("1002;0-1212324234242,1-1212324234200,2-1212324234201,3-1212324234202,
4-1212324234203,5-1212324234204,6-1212324234205,7-1212324234206")
Soll eine Liste sein, also Index und Inhalt
Wie wäre das am einfachsten zu parsen?
Split erst KOMMA, dann Minus ?
0 1212324234242
1-1212324234200
2-1212324234201
<--- Frage ("1003;SetResults");
("1003;0-1-ObjektTyp1-A,1-1-ObjektTyp2-B,
2-1-ObjektTyp1-A,3-1-ObjektTyp2-B,
4-1-ObjektTyp1-A,5-0-ObjektTyp1-F")
Struktur:
Index-Ergebnis-Objekt-Klassifizierung
0-1-ObjektTyp1-A
1-1-ObjektTyp2-B
Antwort ---> ("1001;ACK")
oder
("1001;Err")
oder Timeout!
Grüße Andreas
Antworten
-
Hallo Andreas,
- > Du meinst ich könnte eine komplette Struktur via Deiner Socketklasse übertragen!?!?
ja.
Und richtig, bei andere Sprachen bis hin zu Java etc. sollte man eben auf Interoperabilität achten. Also eher zum Beispiel mit dem XmlSerializer arbeiten (nicht mehr mit dem BinarySerializer - und dann ggf. weiter mit Base64 oder gar nicht weiter verkleinern) in Richtung WebService (nebenbei, was in WCF ja alles einstellbar ist). Das kann dann alles auch C++ und Java etc. lesen und ist durch XML-Basierung viel besser standardisiert. Man kann für solche Sachen auch gut OData-Dienste [OData interoperability] einsetzen, was dann aber mehr DB-orientiert ist.
ciao Frank- Als Antwort markiert Andreas Bauer2 Donnerstag, 17. Februar 2011 18:49
Alle Antworten
-
-
Hallo Andreas,
naja, das hatte ich geahnt. Solche Instanz-Serialisierung über den Draht zu kommunizieren ist natürlich viel sauberer mit WCF machbar - ist genau dessen Domäne. Durch interoperable Protokolle kann man dann erreichen, dass sie maximal mit anderen Sprachen und Umgebungen zusammenspielt.
Aber gut, Dein Ausgangspunkt ist jetzt TcpClient und dann könntest Du zum Beispiel so Deine Klassen (in die Du Dein JSON-artiges String-Format wohl auflösen solltest), die Du dann auf dem Client und dem Server aus einer gesharten DLL holen solltest.
[Serialize Object to a Base64 String - C# - Snipplr Social Snippet Repository]
http://snipplr.com/view/8013/serialize-object-to-a-base64-string/nebst ... DataContractJsonSerializer
ciao Frank -
Hallo Frank,
>naja, das hatte ich geahnt.
;-) schlimm?!?!
public static string SerializeBase64(object o) { // Serialize to a base 64 string byte[] bytes; long length = 0; MemoryStream ws = new MemoryStream(); BinaryFormatter sf = new BinaryFormatter(); sf.Serialize(ws, o); length = ws.Length; bytes = ws.GetBuffer(); string encodedData = bytes.Length + ":" + Convert.ToBase64String(bytes, 0, bytes.Length, Base64FormattingOptions.None); return encodedData; }
sorry ich hoffe ich nerve nicht.
Du meinst ich könnte eine komplette Struktur via Deiner Socketklasse übertragen!?!?
Klasse List 10 Einträge caste es als object, versende es, empfange, caste es in meine Struktur und die Welt ist in Ordnung, oder?
sf.DeSerialize(ws, o); beim empfangen
Oh, es gibt so viele Ideen.
Grüße Andreas
Problem:
FALL1 IO -> C# --- C#
FALL2 NIO C# ---C++,MFC wie
-
Hallo Andreas,
- > Du meinst ich könnte eine komplette Struktur via Deiner Socketklasse übertragen!?!?
ja.
Und richtig, bei andere Sprachen bis hin zu Java etc. sollte man eben auf Interoperabilität achten. Also eher zum Beispiel mit dem XmlSerializer arbeiten (nicht mehr mit dem BinarySerializer - und dann ggf. weiter mit Base64 oder gar nicht weiter verkleinern) in Richtung WebService (nebenbei, was in WCF ja alles einstellbar ist). Das kann dann alles auch C++ und Java etc. lesen und ist durch XML-Basierung viel besser standardisiert. Man kann für solche Sachen auch gut OData-Dienste [OData interoperability] einsetzen, was dann aber mehr DB-orientiert ist.
ciao Frank- Als Antwort markiert Andreas Bauer2 Donnerstag, 17. Februar 2011 18:49
-
- > Du meinst ich könnte eine komplette Struktur via Deiner Socketklasse übertragen!?!?
ja.
Und richtig, bei andere Sprachen bis hin zu Java etc. sollte man eben auf Interoperabilität achten. Also eher zum Beispiel mit dem XmlSerializer arbeiten (nicht mehr mit dem BinarySerializer - und dann ggf. weiter mit Base64 oder gar nicht weiter verkleinern) in Richtung WebService (nebenbei, was in WCF ja alles einstellbar ist). Das kann dann alles auch C++ und Java etc. lesen und ist durch XML-Basierung viel besser standardisiert. Man kann für solche Sachen auch gut OData-Dienste [OData interoperability] einsetzen, was dann aber mehr DB-orientiert ist.Hallo Frank,
was soll ich sagen, Superidee! Wie immer!
Das wäre doch was für Deine Sammlung, sagen wir Download5.ZIP
Für das Prinzip
Objekt
Class Info int id; string content.
Liste mit n Objekten also Infos
Senden und Empfangen
- in C# Senden und Empfangen
- in C# Senden und Empfangen in C++
Wäre doch ein Tipp an Dich. Danke vorab!!!
Grüße Andreas
oder mit Deinem vorhandenen, geht schneller
public class Person { public Person(string name, int alter) { this.Name = name; this.Alter= alter; }