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;
 | |
| }
 |