Message Queue Problem


 
Thread Tools Search this Thread
Top Forums Programming Message Queue Problem
# 8  
Old 07-05-2008
this is the program which send and recive the message b/w server and client

I think its too late even though i am forwarding to u . check it out
server.c
Code:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>

#define MSGSZ     128

#define mess    122


 typedef struct msgbuf {
          long    mtype;
          char    mtext[MSGSZ];
          } message_buf;

//for reciving structure
typedef struct msg1 {
         long    type;
         char    message[mess];
         } mess_buf;

main()
{
    int msqid;
    int msgflg = IPC_CREAT | 0666;
    key_t key;
    size_t buf_length;
    message_buf sbuf;
    key = 1234;

// for reciving the data

    int msgid;
    int msgflag = IPC_CREAT | 0666;
    key_t lock;
    mess_buf gbuf;
//     size_t buffer_length;

    lock = 123;
    

(void) fprintf(stderr, "\nmsgget: Calling msgget(%#lx,%#o)\n",key, msgflg);

    if ((msqid = msgget(key, msgflg )) < 0) {
        perror("msgget");
        exit(1);
    }
    else 
     (void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msqid);

     // We'll send message type 1


    sbuf.mtype = 1;

    (void) strcpy(sbuf.mtext, "Did you get this?");

    buf_length = strlen(sbuf.mtext) + 1 ;

     //Send a message.
     
    if (msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) < 0) {
       printf ("%d, %d, %s, %d\n", msqid, sbuf.mtype, sbuf.mtext, buf_length);
        perror("msgsnd");
        exit(1);
    }

   else 
      printf("Message: \"%s\" Sent\n", sbuf.mtext);
      
//     exit(0);

//this is to recive the message


(void) fprintf(stderr, "\nmsgget: Calling msgget(%#lx,%#o)\n",lock, msgflag);

    if ((msgid = msgget(lock, msgflag )) < 0) {
        perror("msgget");
        exit(1);
    }
    else 
     (void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msgid);


    
    
      //recive the message form the sender

    if (msgrcv(msgid, &gbuf,mess, 1, 0) < 0) {
        perror("msgrcv");
        exit(1);
    }

    
     // Print the answer.
     
    printf("recived:%s\n", gbuf.message);
    exit(0);


}

client.c

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>

#define MSGSZ     128

#define mess    122

typedef struct msgbuf {
    long    mtype;
    char    mtext[MSGSZ];
} message_buf;

// for sending structure

typedef struct msg1 {
         long    type;
         char message[mess];
         } mess_buf;


main()
{
    int msqid;
    key_t key;
    int msgflg = IPC_CREAT | 0666;
    message_buf  rbuf;
    key = 1234;

// for the tranmission

 int msgid;
    int msgflag = IPC_CREAT | 0666;
    key_t lock;
    mess_buf tbuf;
    size_t buf_length;
    lock = 123;

// reciving starts here

    if ((msqid = msgget(key, 0666)) < 0) {
        perror("msgget");
        exit(1);
    }

     // Receive an answer of message type 1.
     
    if (msgrcv(msqid, &rbuf, MSGSZ, 1, 0) < 0) {
        perror("msgrcv");
        exit(1);
    }
 
    printf("%s\n", rbuf.mtext);
//     exit(0);


// now we r sending the message to the server



(void) fprintf(stderr, "\nmsgget: Calling msgget(%#lx,\%#o)\n",lock, msgflag);

    if ((msgid = msgget(lock, msgflag )) < 0) {
        perror("msgget");
        exit(1);
    }
    else 
     (void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msgid);


    tbuf.type = 1;
 
    (void) strcpy(tbuf.message, "r u hearing me?");
     buf_length = strlen(tbuf.message) + 1 ;
     // Send a message.
     
    if (msgsnd(msgid, &tbuf, buf_length, IPC_NOWAIT) < 0) {
        printf ("%d, %d, %s, %d\n", msgid, tbuf.type, tbuf.message, buf_length);
        perror("msgsnd");
        exit(1);
    }

   else 
      printf("Message: \"%s\" Sent\n", tbuf.message);

    exit(0);

}

This User Gave Thanks to lohit For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

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

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

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

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

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

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

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

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

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

10. 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
Login or Register to Ask a Question