69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
/*
|
|
* Interprozesskommunikation über Message Queues - msgclient.c
|
|
*
|
|
* Funktionsweise: Der Client schickt eine Losung an einen Server. Falls die
|
|
* Losung die vom Server erwartete war, gibt letzterer dem Client sein
|
|
* Geheimnis preis.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
#include <sys/ipc.h>
|
|
#include <sys/msg.h>
|
|
#include <string.h>
|
|
|
|
#define MSGSIZE 100
|
|
key_t key = 1337;
|
|
int msgflg = 0666;
|
|
|
|
// Typdefinition für Message Queue (muss explizit geschehen, da noch nicht
|
|
// vorhanden)
|
|
struct message {
|
|
long msgType;
|
|
char msgText[MSGSIZE];
|
|
};
|
|
|
|
// char CODEWORD[] = "<Losung>";
|
|
char CODEWORD[] = "Losung";
|
|
|
|
int main() {
|
|
struct message msg_snd;
|
|
struct message msg_rcv;
|
|
|
|
// Verbinden mit Message-Queue des Servers
|
|
printf("Client: Verbinde mich mit Message Queue.\n");
|
|
int id_q = msgget(key, msgflg);
|
|
|
|
if (id_q >= 0) {
|
|
printf(" OK.\n\n");
|
|
}
|
|
|
|
// Absenden des Codeworts
|
|
printf("Client: Sende Codewort an den Server.\n");
|
|
msg_snd.msgType = 5;
|
|
strcpy(msg_snd.msgText, CODEWORD);
|
|
|
|
int result_snd = msgsnd(id_q, &msg_snd, MSGSIZE, 0);
|
|
|
|
if (result_snd >= 0) {
|
|
printf(" OK.\n\n");
|
|
}
|
|
|
|
// Empfangen der Antwort
|
|
printf("Client: Warte auf Geheimnis.\n");
|
|
|
|
// Abholen des Geheimnisses aus der Message-Queue
|
|
int result_rcv = msgrcv(id_q, &msg_rcv, MSGSIZE, 6, 0);
|
|
|
|
if (result_rcv >= 0) {
|
|
printf(" Geheimnis erhalten.\n\n");
|
|
}
|
|
|
|
// Ausgabe des Geheimnisses
|
|
printf("Client: Das Geheimnis lautet: '%s'.\n\n", msg_rcv.msgText);
|
|
|
|
printf("Client: Ende.\n");
|
|
|
|
return 0;
|
|
}
|