![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| message queue | etenv | High Level Programming | 2 | 11-02-2007 02:09 AM |
| message queue problem | ramneek | IP Networking | 0 | 09-13-2005 11:14 PM |
| Message Queue Problem Again.. | satansfury | High Level Programming | 2 | 07-05-2005 07:52 AM |
| a message queue question.. | yanhu | High Level Programming | 0 | 03-30-2004 06:29 PM |
| Cron message queue problem | mattd | UNIX for Dummies Questions & Answers | 7 | 12-16-2003 04:24 PM |
|
|
Submit Tools | LinkBack | Thread Tools | Display Modes |
|
#1
|
|||
|
|||
|
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.. Code:
//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);
}
Thanks. |
| Forum Sponsor | ||
|
|
|
#2
|
||||
|
||||
|
Code:
typedef struct my1_msgbuf
{
int receiver_id; //server msg queue
int sender_id; //client msg queue
char message[MAXLEN]; //msg to server
}my_msgbuf;
Code:
struct mymsg {
long mtype; /* message type */
char mtext[1]; /* message text */
}
|
|
#3
|
||||
|
||||
|
Hey SaTYR, I have to do a program which is very similar to yours, and I was wondering if you got yours going.
Bye! |
|
#4
|
|||
|
|||
|
Hi there, i wrote the code but i forgot to update my message..
Now i'm uploading my code... While you are compiling, make client.txt->client.c server.txt->server.c local.txt->local.h probably you need to compile server.c like gcc -o server server.c -lpthread for including thread objects. This is the default structural approach of message queues Perderabo Code:
struct mymsg {
long mtype; /* message type */
char mtext[1]; /* message text */
}
if you send a custom structure and receive it with the same structure, you got the message. (Mainly the flexibility of the message queue comes here, you can send and receive your custom structure.) Code:
typedef struct message{
long mtype;
int receiver_id;
int sender_id;
char type;
int length;
char data[MAXDATA];
}msg_tb;
Thats it. |
|
#5
|
|||
|
|||
|
That is fine hope it will help me also
|
|
#6
|
|||
|
|||
|
hi me to have a problem with msg queues.
let it be 3 processes a,b,and c.'a' is sending msg to 'c' and 'c' is sending it back to 'b'.i had used 2 msg queues here.one for 'a' and 'c' and the other for 'c' and 'b'.When something happens to 'c',how does process 'a' and 'b' knows that 'c' got some problem????? |
|
#7
|
|||
|
|||
|
You can do it with signals.When the problem was appeared, send a signal and let your processes to catch it.
|
|||
| Google The UNIX and Linux Forums |