Hallo!
Ich stehe vor der Herausforderung Daten vom Netzwerk (Ethernet) mit einem Konsolenprogramm (C#) zu empfangen / senden. Auf dem PC läuft weiterhin eine Simulation, die diese Daten vom Konsolenprogramm (abk: KP) bekommt, aber auch Daten fürs KP bereitstellt, welche vom KP geladen und versendet werden sollen.
Meine Idee war nun die Daten auf einer RAMDisk als Dateien zwischenzuspeichern. Also anders ausgedrückt:
HIN: Netzwerk -> KP -> RAMDisk (Datei_1) -> Simulation
ZURÜCK: Simulation -> RAMDisk (Datei_2) -> KP -> Netzwerk
Gibts denn auch andere Wege, die Datenübergabe, ohne Dateien anzulegen, zu übertragen? Sowas wie programmübergreifende Variblen?
Gruß, Matze
Diese Art von Kommunikation nennt man "Inter Process Communication" (kurz IPC). Da gibts es einige Möglichkeiten, die sich nach Funktionalität, Komfort und Durchsatz unterscheiden. Unter .NET steht eigentlich nur Remoting und (Low-Level) Sockets zur Verfügung. Letzteres bietet sich natürlich an, wenn du die Daten eh aus dem Netzwerk holst.
Hier mal alles, was Windows an Bord hat, im Prinzip via PInvoke alles von .NET aus nutzbar:
http://msdn2.microsoft.com/en-us/library/aa365574.aspx#base.using_pipes_for_ipc
Ich vermute mal, dass IPC noch ne Runde schneller ist als Dateien auf eine RAMDisk zu schreiben, oder?
ja, du vermutest richtig.
-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).
Mein Blog: Yellow's Blog auf sqlgut.de
.Net 3.5 bietet eine einfache Möglichkeit, anonyme und benannte Pipes zu benutzen: http://blogs.msdn.com/bclteam/archive/2006/12/07/introducing-pipes-justin-van-patten.aspx
Ist einfacher als über P/Invoke.
Hallo DaBIGfish,
du kannst schnelle Interprozesskommunikation in .NET auch mit Remoting (IPCChanel) machen. Mit Remoting kannst Du Funktionen eines anderen Prozesses über einen Kommunikationskanal aufrufen.
Du findest hier im Forum viele Informationen zu Remoting.