标签:
client.c
#include <sys/socket.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/stat.h> #include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <time.h> #define maxn 101 /** 消息队列发送信息全过程有: 1>定义消息结构 2>打开/创建消息队列 3>组装信息 4>发送信息 5>发送判断 消息队列接收信息全过程: 1>定义消息结构 2>打开/创建消息队列 3>准备接收消息缓冲区 4>接收消息 5>接收判断 **/ struct mymsgbuf { long mtype; char ctext[100]; }; void _encode(char e_message[],char d_message[]) { long i ; sscanf(d_message,"%s",e_message); memset(d_message,0,sizeof(d_message)); for(i = 0;i < strlen(e_message);i++) { sprintf(d_message,"%s%03d",d_message,e_message[i]+588); } } int main() { /**发送信息例子**/ struct mymsgbuf buf; int msgid; char d_message[maxn]; char e_message[maxn]; printf("输入要发送的消息:"); if((msgid = msgget(0x1234,0666|IPC_CREAT)) <0) { fprintf(stderr, "open msg %X failed.\n",0x1234 ); return ; } while(strncmp(d_message,"exit",4)) { memset(&buf,0,sizeof(buf)); memset(d_message,‘\0‘,sizeof(d_message)); memset(e_message,‘\0‘,sizeof(e_message)); /**从键盘输入消息结构数据内容**/ fgets(d_message,sizeof(d_message),stdin); /**加密信息**/ printf("加密前的信息是: %s\n",d_message); _encode(d_message,e_message); printf("加密后的信息是: %s\n",e_message); /**设置消息类型为进程ID**/ strcpy(buf.ctext,e_message); buf.mtype = getpid(); /**发送信息**/ while((msgsnd(msgid,&buf,strlen(buf.ctext),0)) < 0) { if(errno == EINTR) continue; return; } printf("输入要发送的消息:"); } return 0; }
server.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; }
结果如下:
client.png
server.png
标签:
原文地址:http://www.cnblogs.com/chenyang920/p/4984498.html