Interprozesskommunikation

Moin!

Ich habe folgendes Problem: Ich habe einen Prozess welcher bis zu 10mal pro Sekunde öffnet und Daten an einen anderen Prozess schicken soll. Die Datenmenge liegt bei maximal 10KB/s eher deutlich darunter. Die Verbindung zwischen beiden kann jedoch nicht dauerhaft bestehen bleiben und muss vor jedem Senden geöffnet werden (und danach natürlich auch wieder geschlossen werden)!

Die Frage ist jetzt: Wie kann ich zwischen den beiden Programmen eine zuverlässige Kommunikation gewährleisten? Ich dachte schon an eine UDP-Netzwerkverbindung - jedoch vermute ich mal, dass das ganze etwas zu groß ist. Alternativ wäre es möglich die Daten in eine Datei zu schreiben und auszulesen, aber so richtig das Wahre ist das ja nicht.

Gibt es für sowas sinnvolle Lösungsmöglichkeiten?

(Programmierung ausschließlich in C unter Windows)

Grüße

Nimda05
 
Plattformübergreifend wäre Netzwerk am einfachsten. Der Durchsatz ist extrem hoch, die Latenz niedrig und die Programmierung einfach.
Es juckt überhaupt nicht, wenn du 10 oder 100 mal eine lokale TCP-Verbindung öffnest ;)
 
Hört sich grundsätzlich nicht schlecht an, jedoch habe ich ein Problem: Sämtliche Quelltexte und Beispiele im Internet zu Named Pipes sind in C++ und ich habe hier ein reines C-Projekt vor mir...

Hast du einen Tipp?:wink:
 
Danke!

Habe das ganze mal mit Named Pipes umgesetzt und habe schon erste Erfolge. Leider gehen scheinbar Daten bei der Kommunikation zwischen sendendem Clienten und empfangenden Server verloren.


Kurz und knapp die wichtigsten zusammengefasst:
Code:
Client:
In einer Funktion, welche immer wieder aufgerufen wird:
CreateFileW(L"\\\\.\\pipe\\RhysPipe", GENERIC_WRITE,0, NULL, OPEN_EXISTING,0, NULL);
WriteFile( hPIPE, buffer, sizeof(buffer), &BYTESWRITTEN, NULL );

Server:
HANDLE hPIPE = CreateNamedPipe(        _PIPE_NAME,
                                        PIPE_ACCESS_DUPLEX, 
                                        PIPE_TYPE_MESSAGE |  
                                        PIPE_READMODE_MESSAGE | 
                                        PIPE_WAIT, 
                                        PIPE_UNLIMITED_INSTANCES,  
                                        256, 
                                        256, 
                                        10000, //100 00 mseconds timeout
                                        0x00000000); 
ConnectNamedPipe( hPIPE, NULL );
while(true){
     ReadFile(hPIPE, Received_Buffer, 512, &BytesRead, NULL )
....
}

Es scheint, als ob ganze Nachrichten fehlen. Kann es sein, dass der sendende Client seine eigenen Nachrichten in der Pipe überschreibt, wenn der Server nicht schnell genug gewesen ist und die Daten ausgelesen hat?

Grüße

Nimda05
 
hast du dir die beispiele in der MSDN angesehen? speziell mit hinblick auf das was CreateFile bzw CreateFileW zurück liefern? ... das sollte unbedingt geprüft werden ob das INVALID_HANDLE_VALUE entspricht ... ggf ist die pipe gerade auf busy oder ähnliches ...

Named Pipe Client
 
Zurück
Oben