Avatar billede mollmannj Nybegynder
24. oktober 2002 - 17:06 Der er 5 kommentarer og
1 løsning

message passing

Vi har et kæmpe problem ang. message passing. vi har to struct og to msgid. de bliver sendt fra en
client process og modtaget i en server process(koden neden for). vores problem
er at vi ikke kan få modtagelsen til at kende for skel på de to struct og de to msgid!!
hvordan kan dette lade sig gøre?????????????????


struct vare_msg
{
    long int msg_type_vare;
    char besked[MAX_TEXT];
    //int initial;
};

struct antal_msg
{
    long int msg_type_antal;
    int stk;
};

struct ud_vare_msg
{
    long int msg_type_udvare;
    char besked[MAX_TEXT];
};

struct ud_antal_msg
{
    long int msg_type_udantal;
    int stk;
};


struct vare_msg vare;
struct ud_vare_msg ud_vare;
struct antal_msg antal;
struct ud_antal_msg ud_antal;

long int msg_type_vare = 1;
long int msg_type_antal = 1;
long int msg_type_udvare = 2;
long int msg_type_udantal = 2;

/*
long int vare_modtagelse = 1;
long int antal_modtagelse = 1;
long int ud_vare_modtagelse = 2;
long int ud_antal_modtagelse = 2;
*/
int main()
{


    msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
    msgid2 = msgget((key_t)1235, 0666 | IPC_CREAT);
    //msgid3 = msgget((key_t)1113, 0666 | IPC_CREAT);

    //sem_id = semget((key_t)1234,  3, 0666 | IPC_CREAT);
    //if(msgid1 == -1 || msgid2 == -1 || msgid3 == -1)
    if(msgid == -1)// || msgid2 == -1)
    {
        fprintf(stderr, "Fejl i message: %d \n", errno);
        exit(EXIT_FAILURE);
    }



    while (running)
    {

/***************************INDLEVERING**************************************************/

        printf("vare:Vare:%s\n", vare.besked);
        if(msgrcv(msgid, (void *)&vare, BUFSIZ, msg_type_vare, 0) == -1)

        {
            printf("1vare:Vare:%s, Antal stk:%d\n", vare.besked, antal.stk);
            fprintf(stderr, "Fejl i message modtagelse1: %d \n", errno);
            exit(EXIT_FAILURE);
        }

        printf("2vare:Vare:%s, Antal stk:%d\n", vare.besked, antal.stk);


            if(msgrcv(msgid, (void *)&antal, BUFSIZ, msg_type_antal, 0) == -1)
        {
            printf("3 Antal stk:%d\n", antal.stk);
            fprintf(stderr, "Fejl i message modtagelse2: %d \n", errno);
            exit(EXIT_FAILURE);
        }

        printf("Flg. Indlevering er fortaget - Vare:%s, Antal stk:%d\n", vare.besked, antal.stk);


/***************************INDLEVERING SLUT**************************************************/

/***************************UDLEVERING**************************************************/

        if(msgrcv(msgid2, (void *)&ud_vare, BUFSIZ, msg_type_udvare, 0) == -1)
        {
            fprintf(stderr, "Fejl i message modtagelse3: %d \n", errno);
            exit(EXIT_FAILURE);
        }
        printf("5vare:Vare:%s,  Antal stk:%d\n", ud_vare.besked, ud_antal.stk);

        if(msgrcv(msgid2, (void *)&ud_antal, BUFSIZ, msg_type_udantal, 0) == -1)
        {
            fprintf(stderr, "Fejl i message modtagelse4: %d \n", errno);
            exit(EXIT_FAILURE);
        }

        printf("6vare:Vare:%s, Antal stk:%d\n", ud_vare.besked, ud_antal.stk);

        //if(vare.msg_type_vare == 2 && antal.msg_type_antal == 2)
        //{
        printf("Flg. Udlevering er fortaget - Vare:%s, Antal stk:%d \n", ud_vare.besked,ud_antal.stk);

/***************************UDLEVERING SLUT**************************************************/
    }
Avatar billede cms Nybegynder
24. oktober 2002 - 19:40 #1
For mig at se er dine id-konstanters værdier temmeligt sorte...
Avatar billede mollmannj Nybegynder
24. oktober 2002 - 21:29 #2
Denne del af koden er kun server processen. det er her at beskederne bliver modtaget. jeg opretter de samme structs og de samme msgid i client processen. men burde man ikke kunne sende flere flere structs paralelt hvis man bruger forskellige msgidér?
Avatar billede cms Nybegynder
25. oktober 2002 - 15:11 #3
Jo, men det gør du jo heller ikke. Struct for vare og struct for antal får samme msgid, nemlig én.
Avatar billede mollmannj Nybegynder
25. oktober 2002 - 15:24 #4
i starten da vi kun kørte med indlevering fungerede det fint med de to structs der blev ført over med samme msgid. men da vi indførte udlevering, og gav den et andet msgid, kunne den ikke kende forskel på de to. Og det finder jeg rimeligt besynderligt!!! Kan der være en logisk forklaring?
Avatar billede vilgerne Nybegynder
25. oktober 2002 - 17:05 #5
Det må da være noget i har lært i undervisningen på DØK??? Men kan I ikke bare lave en send funktion i Jeres server og en modtag i Jeres client- så kan I bare lave det andet på anden kanal f.eks. 1235 ;-)

God arbejdslyst... Der er jo en uge endnu- no sweat!!!
Avatar billede mollmannj Nybegynder
28. oktober 2002 - 12:51 #6
flemming
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester