Sponsored Content
Full Discussion: Message Queue Problem
Top Forums Programming Message Queue Problem Post 70547 by SaTYR on Sunday 1st of May 2005 03:07:59 AM
Old 05-01-2005
Network Message Queue Problem

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 Smilie...

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

What is the problem here?
Thanks.
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Unix message Queue

Hi, I am working closly with unix message queues i have encountered the following - after creating the Q and start working with it (pushing & pulling) i receive the following stange parameters on the q's - STIME=no_entry Qnum=0 CBYTES=4140 when this happens, the Q is disabled (meaning i... (3 Replies)
Discussion started by: kel
3 Replies

2. UNIX for Dummies Questions & Answers

Cron message queue problem

I have a problem with running jobs out of cron on Solaris 8. Initially when one of the users on the box (other than root) attempted to save the crontab after modification by using "crontab -e", the message "Crontab: cannot open the crontab file in the crontab directory" was given. I then... (7 Replies)
Discussion started by: mattd
7 Replies

3. Programming

a message queue question..

Hi there: Thanks first. When I use a message queue amony severl processes, will I have to synchronize the queue? I don't think I would have to because a message queue is implemented in a link listed. Correct me If I am wrong... (0 Replies)
Discussion started by: yanhu
0 Replies

4. Programming

Message Queue Problem Again..

Is there any way one can delete , say , a particular message from a message queue on system V? (2 Replies)
Discussion started by: satansfury
2 Replies

5. IP Networking

message queue problem

I am sending and retriving the message to the queue the problem is after retrieving the message can i see what is there in my message queue. (actually in my application i am encountring some garbage value) so i want to retieve this garbage value and also want to know its size how... (0 Replies)
Discussion started by: ramneek
0 Replies

6. Programming

Message Queue with fork() help

hi all... ive been trying this program where i spawn 4 threads... and i am trying to use message queue to send msgs from 3 of the threads to the parent thread... but it doent seem to be working... ive almost pulled out my hair tryin to fix the prob :confused: another wierd thing... (1 Reply)
Discussion started by: strider
1 Replies

7. Programming

message queue

Hello, i need to write a message queue "chat server", that should work only localy. Can anyone please help me with some ideas and peshaps code. I'm studying the UNIX IPC mechanisms right now. So far, i understand how it works but i still cannot get an idea how to write a chat programm... ... (2 Replies)
Discussion started by: etenv
2 Replies

8. Programming

[C]Problem removing a message queue

Hi!! This code works if I don't remove the message queue. In A.c I create 3 processes that send a message in a message queue. in B.c other 3 processes receive 1 message for each (the messages sent from A), change the value of "dato" and put again the message in the queue. The processes in A.c... (0 Replies)
Discussion started by: Sentinella
0 Replies

9. Programming

How to limit max no of message in a posix message queue

Hii can anyone pls tell how to limit the max no of message in a posix message queue. I have made changes in proc/sys/fs/mqueue/msg_max But still whenever i try to read the value of max. message in the queue using attr.mq_curmsgs (where struct mq_attr attr) its giving the default value as 10.... (0 Replies)
Discussion started by: mohit3884
0 Replies

10. Programming

UNIX Message Queue

Hello !!!!! I have a simple question but i can't find the answer anywhere hope to meet it here. Why it is a bad idea to pass pointers through message queues ? Most structs i see all of their char types are arrays... Is it becase having pointers means we could possibily send wrong bytes ? For... (2 Replies)
Discussion started by: qlyine
2 Replies
ppmtosixel(1)                                                 General Commands Manual                                                ppmtosixel(1)

NAME
ppmtosixel - convert a portable pixmap into DEC sixel format SYNOPSIS
ppmtosixel [-raw] [-margin] [ppmfile] DESCRIPTION
Reads a portable pixmap as input. Produces sixel commands (SIX) as output. The output is formatted for color printing, e.g. for a DEC LJ250 color inkjet printer. If RGB values from the PPM file do not have maxval=100, the RGB values are rescaled. A printer control header and a color assignment table begin the SIX file. Image data is written in a compressed format by default. A printer control footer ends the image file. OPTIONS
-raw If specified, each pixel will be explicitly described in the image file. If -raw is not specified, output will default to com- pressed format in which identical adjacent pixels are replaced by "repeat pixel" commands. A raw file is often an order of magni- tude larger than a compressed file and prints much slower. -margin If -margin is not specified, the image will be start at the left margin (of the window, paper, or whatever). If -margin is speci- fied, a 1.5 inch left margin will offset the image. PRINTING
Generally, sixel files must reach the printer unfiltered. Use the lpr -x option or cat filename > /dev/tty0?. BUGS
Upon rescaling, truncation of the least significant bits of RGB values may result in poor color conversion. If the original PPM maxval was greater than 100, rescaling also reduces the image depth. While the actual RGB values from the ppm file are more or less retained, the color palette of the LJ250 may not match the colors on your screen. This seems to be a printer limitation. SEE ALSO
ppm(5) AUTHOR
Copyright (C) 1991 by Rick Vinci. 26 April 1991 ppmtosixel(1)
All times are GMT -4. The time now is 01:35 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy