IO-DAY8

使用消息队列去实现2个终端之间的互相聊天
要求:千万不要做出来2个终端之间的消息发送是读一写的,一定要能够做到,一个终端发送n条消息,另一个终端一条消息都不回复
A终端:

#include<myhead.h>
typedef struct msgbuf
{
	long type;
	char text[256];
}msg_t;
void* snda(void* arg)
{
	int id=*(int*)arg;
	msg_t abuf;
	int alen=0;
	while(1)
	{
		memset(&abuf,0,sizeof(msg_t));
		abuf.type=1;
		printf("请输入消息:");
		scanf("%256s",abuf.text);
		while(getchar()!=10);
		alen=strlen(abuf.text);
		msgsnd(id,&abuf,alen,0);
	}
}
void* rcvb(void* arg)
{
	int id=*(int*)arg;
	msg_t bbuf;
	int blen=0;
	while(1)
	{
		memset(&bbuf,0,sizeof(msg_t));
		blen=msgrcv(id,&bbuf,256,2,0);
		printf("B:%s\n",bbuf.text);
	}

}
int main(int argc, char *argv[])
{
	key_t key=ftok("./talk",1);
	if(key==-1)
	{
		perror("ftok");
		return 1;
	}
	int id=msgget(key,IPC_CREAT|0666);
	pthread_t id2;
	pthread_t id3;
	pthread_create(&id2,NULL,snda,&id);
	pthread_create(&id3,NULL,rcvb,&id);
	pthread_join(id2,NULL);
	pthread_join(id3,NULL);


      return 0;
}

B终端:

#include<myhead.h>
typedef struct msgbuf
{
	long type;
	char text[256];
}msg_t;
void* sndb(void* arg)
{
	int id=*(int*)arg;
	msg_t bbuf;
	int blen=0;
	while(1)
	{
		memset(&bbuf,0,sizeof(msg_t));
		bbuf.type=2;
		printf("请输入消息:");
		scanf("%256s",bbuf.text);
		while(getchar()!=10);
		blen=strlen(bbuf.text);
		msgsnd(id,&bbuf,blen,0);
	}
}
void* rcva(void* arg)
{
	int id=*(int*)arg;
	msg_t abuf;
	int alen=0;
	while(1)
	{
		memset(&abuf,0,sizeof(msg_t));
		alen=msgrcv(id,&abuf,256,1,0);
		printf("A:%s\n",abuf.text);
	}

}
int main(int argc, char *argv[])
{
	key_t key=ftok("./talk",1);
	if(key==-1)
	{
		perror("ftok");
		return 1;
	}
	int id=msgget(key,IPC_CREAT|0666);
	pthread_t id2;
	pthread_t id3;
	pthread_create(&id2,NULL,sndb,&id);
	pthread_create(&id3,NULL,rcva,&id);
	pthread_join(id2,NULL);
	pthread_join(id3,NULL);


      return 0;
}

效果图:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值