Hi all,
I need help about message queues, i have a server-client program that communicates each other via msg queue, firstly server opens its msg queue and waits for msg then client opens server msg queue and its own msg queue(for receiving msg from server,clients sends msg to server msg queue,but receives their reply from their private msg queue).
I have problem at sending generated structure to the server :(...
I am also sending my source code for help..
//Here is my client source
#define MAXLEN 32
#define MSGKEY 5L
typedef struct my1_msgbuf
{
int receiver_id; //server msg queue
int sender_id; //client msg queue
char message[MAXLEN]; //msg to server
}my_msgbuf;
void main (int argc, char *argv[])
{
my_msgbuf buffer;
int msgID;
int myId;
if (argc<2)
{
printf("Give message as parameter!");
exit(-1);
}
//create and get a message queue
if ((msgID=msgget(MSGKEY,0666|IPC_CREAT))<0)
{
perror("Error getting msg queue.");
exit(-1);
}
if((myId=msgget(112233,0666|IPC_CREAT))<0){//create client msgq-im just testing with 112233
perror("Error getting client msg queue!\n");
exit(-2);
}
//copy the message into the buffer (prepare)
strcpy(buffer.message,argv[1]);
buffer.receiver_id=msgID; //server msgq id
buffer.sender_id=myId;//client msg q id - server need to know client id
//send the message to the OS-managed buffer
if (msgsnd(msgID,&buffer,sizeof(buffer.message),0)<0)//here i have an invalid argument exception!!!
{
perror("Error writing to message queue.");
exit(-1);
}
printf("Message has been send.\n\n");
//wait msg from server
if(msgrcv(myId,&buffer,sizeof(buffer),0L,0)<0){//waiting server to reply me..
printf("Unable to receive client msg\n.");
exit(1);
}
exit(0);
}
//Here is the server side
define MAXLEN 256
#define MSGKEY 5L
typedef struct my1_msgbuf
{
int receiver_id;
int sender_id;
char message[MAXLEN];
}my_msgbuf;
void main ()
{
my_msgbuf buffer;
int msgID;
int temp;
//create and get a message queue
if ((msgID=msgget(MSGKEY,0666|IPC_CREAT))<0)
{
perror("Error getting msg queue.");
exit(-1);
}
//RECEIVE MESSAGE FROM OPERATING SYSTEMS QUEUE
if (msgrcv(msgID,&buffer,
sizeof(buffer.message),0L,0)<0)
{
perror("Error receiving message from Queue.");
exit(-1);
}
printf("\nMessage read from queue:\n\n");
printf("MESSAGE: %s\n",buffer.message);
printf("Sender id: %d\n",buffer.sender_id);
printf("Receiver id: %d\n",buffer.receiver_id);
temp = buffer.receiver_id;
buffer.receiver_id = buffer.sender_id;
buffer.sender_id = temp;
//Send same msg to the client that send..
while(msgsnd(buffer.receiver_id,&buffer,sizeof(buffer),0)>0);
//DELETE QUEUE
if (msgctl(msgID,IPC_RMID,0)<0)
{
perror("Error deleting message queue.");
exit(-1);
}
exit(0);
}
What is the problem here?
Thanks.