关于IPC问题的咨询

xtang先生:
您好!
我最近在看QNX系统中有关message-paaaing的内容,试编了一个C/S程序,可运行的结果不是我所期望的。

程序的基本思想:
client方
点击send按钮,通过SendMsg()将 text中的内容发送到另一个application中的 label

server方
通过MsgReceive()接收client方送来的消息在label中显示出来,然后通过MsgReply(), 给client方一个答复,答复的内容在client方的text中显示出来。


我发送一个消息“I am a student.”给server, 可是运行的结果是在label中显示如下内容"((", 而在client方没有答复的信息。无论我怎么思考,也不知道问题出来哪里。

望xtang先生在闲暇之余给予解答,先行感谢!如果可以的话,能不能给一个有关这个程序的完整的代码,我好有个感性认识。非常感谢,我将恭候佳音。

你的程序使用Photon吗?

你可以把程序简化到client发一个字符串到server, server 打印这个字符串并回答。
如果还是不对,那么你的IPC部份的程序有问题,可以把程序Post 上来。否则,就是跟Photon有问题了。

是的,我用的是Photon.

xtang先生:
您好!
还是这个问题(我用的是PhAB),我昨天试了一天,还是没有答案,希望您有时间的话一定要帮帮我,好吗?

我为这个问题好长时间都没有一点进展,我真的好着急,真心的希望你一定要帮帮我,最好能给我一个完整的代码,这样我可以有所借鉴,会给我一个很大的启发的,好吗?

盼望着您的好消息。

我的意思,叫你写一个不用Photon的C/S,就只发一个字符串。看看能不能正常接受。如果可以,那么再检查你的Photon部分的调用,看看问题是不是在那里。

xtang先生:

关于这个问题,我这些天进行了很多次的试探,但仍是毫无结果,我真的已经无能为力了,作为一个初学者,我真心的希望能够得到你的帮助,帮我解决这个问题好吗?这个问题对我真的很重要,但直接影响我对QNX中Message Passing的理解,求你一定要帮帮我,好吗?

我不知道你的问题在那里啊。下面是最简单的Message Passing的例子(随手写的,没有编译试过),希望能对你有所启发。

Server:

#include <stdio.h>
#include <sys/neutrino.h>
int main()
{
    int chid, rcvid;
    char buf[50];

    if ((chid = ChannelCreate(0)) == -1) {
       perror("ChannelCreate");
       return -1;
   }
   printf("server pid is %d, chid is %d\n", pid = getpid(), chid);

   memset(buf, 0, 50);
   if ((rcvid = MsgReceive(chid, buf, 49, 0)) == -1) {
      perror("MsgReceive");
      return -1;
   }

   printf("rcvid is %d, msg is '%s'\n", rcvid, buf);
   MsgReply(rcvid, 0, 0, 0);
   ChannelDestroy(chid);
   return 0;
}

client:

#include <stdio.h>
#include <sys/neutrino.h>

int main(int argc, char **argv)
{
     int pid, chid;
     int coid;
     char *msg = "Hello tragicalwind!\n";
     if (argc < 3) {
       printf("client <server_pid> <server_chid> \n");
       return -1;
     }

     pid = atoi(argv[1]);
     chid = atoi(argv[2]);

     coid = ConnectAttach(0, 0, 0, _NTO_SIDE_CHANNEL, 0);
     if (coid == -1) {
        perror("ConnectAttach");
        return -1;
    }

    if (MsgSend(coid, msg, strlen(msg), 0, 0) == -1) {
       perror("MsgSend");
       return -1;
    }

    ConnectDetach(coid);
    return 0;
}

我试试看能不能运行。不好意思,一直麻烦你,不管怎么说,我都非常感谢。

http://www.eese.bee.qut.edu.au/QUAV/Postgraduate/Project%20Resources/Real%20Time%20Operating%20Systems/QNX/qnx_real_time_operating_system.php

这个网站的教程对你这样的初学者很有帮助的。

谢谢你,lonki先生,你让我找到了梦寐以求的宝贝,对我有非常非常大的帮助,谢谢你,真的非常感谢你。

希望你有什么好的东东一定要告诉我,我真的太需要了。

lonki先生:
您好!
我现在主要在学习GUI, 您没有没有关这方面的资料,最好是有具体例子的,这样更有助于我的理解,可以帮我吗?

不好意思,对QNX的Phton我也是一无所知,因为我的工作领域不在这方面,我仅做“底层”的程序。

lonki : the above url cann’t open . Can you check it for me . very Thanks!

tragicalwind : have you solved your phab c/s program ? if you solved it , can you post some simple code there . very Thanks!