【发布时间】:2021-03-12 12:59:01
【问题描述】:
我正在 c 中创建两个应用程序(客户端和服务器)以通过 IPC 消息队列进行通信。 服务器必须只使用一个队列为许多客户端操作。必须为服务器提供客户端的 ID 作为命令行参数,以及每个客户端的 ID。客户端由 mesg_type 识别。
我在接收来自所有客户端的消息时遇到问题 - 我可以从客户端 A 接收消息几次,然后从客户端 B 接收几次,从客户端 A 接收几次,依此类推。我认为问题出在代码的以下部分:
int status;
key_t key;
int msgid;
for(int i=0;i<argc-1;i++){
clients_ids[i]=atoi(argv[i+1]);
}
key = ftok(".", 50);
msgid = msgget(key, 0666 | IPC_CREAT);
if (msgid == -1) {
fprintf(stderr, "msgget failed: %d\n", errno);
exit(EXIT_FAILURE);
}
do{
for (int k=0;k<=argc-2;k++){
status = msgrcv(msgid, &message, sizeof(message), clients_ids[k], 0);
if(status != -1){
type = message.mesg_type;
strcpy(mesg, message.mesg_text);
}
}
printf("Message received (from id: %d): %s ",type, mesg);
你能告诉我我应该改变什么吗?
【问题讨论】:
-
您应该包含演示问题所需的完整(最小化)代码,以及输入的特定场景、所需的输出、当前错误输出以及对确切内容的描述出错了。我认为不值得读者花时间去推测删节的代码。