后面第二个版本是循环发布的
发送端cpp代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
//通过ftok函数得到指定的ID。
key_t key = ftok(".", 111); //第二个参数随便给
if(key == -1)
{
perror("ftok 创建失败");
exit(-1);
}
cout << "通过ftok函数创建指定的ID" << endl;
//创建一个消息队列对象
int msgid = msgget(key, IPC_CREAT|IPC_EXCL|0777);
if(msgid == -1)
{
perror("创建这个消息队列失败!");
exit(-1);
}
cout << "创建talker消息队列成功!" << endl;
cout << "这个队列的ID: " << msgid << endl;
//发送消息
int res = msgsnd(msgid, "Hello Msg!", 10, 0);
if(res == -1)
{
perror("消息发送失败:");
exit(-1);
}
cout << "消息发送成功:server—>" << endl;
return 0;
}
接收端cpp代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
//通过ftok函数得到指定的ID。
key_t key = ftok(".", 111); //第二个参数随便给
if(key == -1)
{
perror("ftok 获取失败");
exit(-1);
}
cout << "通过ftok函数得到指定的ID" << endl;
//创建一个消息队列对象
int msgid = msgget(key, 0);
if(msgid == -1)
{
perror("创建这个消息队列失败!");
exit(-1);
}
cout << "创建lisenter消息队列成功!" << endl;
cout << "这个队列的ID: " << msgid << endl;
//存放接收的消息
char buffer[128];
//接收消息
int res = msgrcv(msgid, buffer, 128, 0, 0);
if(res == -1)
{
perror("消息接收失败:");
exit(-1);
}
cout << "消息接收成功:client->" << buffer << endl;
return 0;
}
先通过ipcs查看系统消息队列和共享内存
前面的消息队列是我们发送端创建的,先删除它,再重新执行发送和接收
重新执行两个cpp的文件
执行成功
循环发送版本
发送端cpp
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
//通过ftok函数得到指定的ID。
key_t key = ftok(".", 111); //第二个参数随便给
if(key == -1)
{
perror("ftok 创建失败");
exit(-1);
}
cout << "通过ftok函数创建指定的ID" << endl;
//创建一个消息队列对象
int msgid = msgget(key, IPC_CREAT|IPC_EXCL|0777);
if(msgid == -1)
{
perror("创建这个消息队列失败!");
exit(-1);
}
cout << "创建talker消息队列成功!" << endl;
cout << "这个队列的ID: " << msgid << endl;
char a[100]={"hello chao ge"};
int b = sizeof(a);
while(1)
{
sleep(1);
//发送消息
int res = msgsnd(msgid, a, b, 0);
if(res == -1)
{
perror("消息发送失败:");
exit(-1);
}
cout << "消息发送成功:server—>" << endl;
}
return 0;
}
接收端cpp
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
//通过ftok函数得到指定的ID。
key_t key = ftok(".", 111); //第二个参数随便给
if(key == -1)
{
perror("ftok 获取失败");
exit(-1);
}
cout << "通过ftok函数得到指定的ID" << endl;
//创建一个消息队列对象
int msgid = msgget(key, 0);
if(msgid == -1)
{
perror("创建这个消息队列失败!");
exit(-1);
}
cout << "创建lisenter消息队列成功!" << endl;
cout << "这个队列的ID: " << msgid << endl;
//存放接收的消息
char buffer[128];
while(1)
{
sleep(1);
//接收消息
int res = msgrcv(msgid, buffer, 128, 0, 0);
if(res == -1)
{
perror("消息接收失败:");
exit(-1);
}
cout << "消息接收成功:client->" << buffer << endl;
}
return 0;
}
结果
多消息发送队列:这里就是比前面多加一个结构体
发送端cpp
#include
#include
#include
#include
#include
#include
#include
#include "string.h"
using namespace std;
struct msg
{
long m_type;
char m_messga[256];
};
int main()
{
//通过ftok函数得到指定的ID。
key_t key = ftok(".", 111); //第二个参数随便给
if(key == -1)
{
perror("ftok 创建失败");
exit(-1);
}
cout << "通过ftok函数创建指定的ID" << endl;
//创建一个消息队列对象
int msgid = msgget(key, IPC_CREAT|IPC_EXCL|0777);
if(msgid == -1)
{
perror("创建这个消息队列失败!");
exit(-1);
}
cout << "创建talker消息队列成功!" << endl;
cout << "这个队列的ID: " << msgid << endl;
struct msg msg1, msg2;
msg1.m_type = 1;
msg2.m_type = 2;
strcpy(msg1.m_messga , "123456");
strcpy(msg2.m_messga , "abcdse");
while(1)
{
//发送消息1
int res = msgsnd(msgid, &msg1, strlen(msg1.m_messga), 0);
if(res == -1) //发送消息2 if(res == -1) } 接收端cpp #include struct msg int main() if(key == -1) cout << "通过ftok函数得到指定的ID" << endl; if(msgid == -1) cout << "创建lisenter消息队列成功!" << endl; //存放接收的消息 struct msg msg_tem; //接收消息1 参数(1)代表它的type 在前面定义消息1的时候的 type = 1; if(res == -1) cout << "消息接收成功:client1->" << msg_tem.m_messga << endl; if(res == -1) cout << "消息接收成功:client2->" << msg_tem2.m_messga << endl;
{
perror("消息发送失败:");
exit(-1);
}
cout << "消息发送成功:server—>" << endl;
cout<<"发送消息1 成功"<
res = msgsnd(msgid, &msg2, strlen(msg2.m_messga), 0);
{
perror("消息发送失败:");
exit(-1);
}
cout<<"发送消息2 成功"<
return 0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
{
long m_type;
char m_messga[256];
};
{
//通过ftok函数得到指定的ID。
key_t key = ftok(".", 111); //第二个参数随便给
{
perror("ftok 获取失败");
exit(-1);
}
//创建一个消息队列对象
int msgid = msgget(key, 0);
{
perror("创建这个消息队列失败!");
exit(-1);
}
cout << "这个队列的ID: " << msgid << endl;
struct msg msg_tem2;
while(1)
{
int res = msgrcv(msgid, &msg_tem, sizeof(msg_tem)-4, 1, 0);
{
perror("消息接收失败:");
exit(-1);
}
//接收消息2 参数(2)代表它的type 在前面定义消息2的时候的 type = 2;
res = msgrcv(msgid, &msg_tem2, sizeof(msg_tem2)-4, 2, 0);
{
perror("消息接收失败:");
exit(-1);
}
cout<
}
return 0;
}