您的位置:首页 > 其它

单消息队列客户-服务器间的双向通信

2015-11-21 18:40 246 查看
client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define maxn 101
/**
消息队列发送信息全过程有:
1>定义消息结构
2>打开/创建消息队列
3>组装信息
4>发送信息
5>发送判断
消息队列接收信息全过程:
1>定义消息结构
2>打开/创建消息队列
3>准备接收消息缓冲区
4>接收消息
5>接收判断

**/
struct mymsgbuf
{
long mtype;
char  ctext[100];
};
void _decode(char e_message[],char d_message[])
{
int i ,n = strlen(e_message);
char buf1[4];
memset(d_message,0,sizeof(d_message));
for(i = 0 ;i < n;)
{
memset(buf1,0,sizeof(buf1));
sscanf(e_message,"%03s%s",buf1,e_message);
i = i+3 ;
sprintf(d_message,"%s%c",d_message,atoi(buf1)-588);
}
sprintf(e_message,"%s",d_message);
}
int  main()
{
/**接收信息例子**/
struct  mymsgbuf buf;
int msgid;
int ret;
if((msgid = msgget(0x1234,0666|IPC_CREAT)) <0)
{
fprintf(stderr, "open msg %X failed.\n",0x1234 );
return ;
}
while(strncmp(buf.ctext,"exit",4))
{
memset(&buf,0,sizeof(buf));
/**接收信息**/
printf("waiting ............\n\n");
while((msgrcv(msgid,&buf,sizeof(buf.ctext),0,0)) < 0)
{
if(errno == EINTR) continue;
return;
}
char e_message[maxn];
char d_message[maxn];
strcpy(e_message,buf.ctext);
int len;
printf("加密后的信息是: %s\n",e_message);
_decode(e_message,d_message);
strcpy(buf.ctext,d_message);
fprintf(stderr, "Msg : Type = %ld,Len = %d,Text :%s\n",buf.mtype,ret,buf.ctext );
}
return 0;
}


View Code
结果如下:

client.png



server.png

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: