我正在用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);你能建议我改些什么吗?
发布于 2020-12-01 00:33:38
将对printf()的调用移到for (int k=0;k<=argc-2;k++){循环中。然后将显示所有消息。
https://stackoverflow.com/questions/65076379
复制相似问题