单消息队列客户-服务器间的双向通信
2015-11-21 18:40
246 查看
client.c
View Code
结果如下:
client.png
server.png
#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
相关文章推荐
- GDB+GDBServer安装
- 项目4 - 利用遍历思想求解图问题(6-7)
- 浅谈二叉树遍历的栈方法
- Jenkins邮件模板
- 项目4 - 利用遍历思想求解图问题(1-5)
- Java——用户名输入框
- 闪屏页面开发遇到的问题you need to use a theme.appcompat theme (or descendant)
- 闪屏页面开发遇到的问题you need to use a theme.appcompat theme (or descendant)
- IOS通过数组给Cell中的文本框和小图标赋值
- 闪屏页面开发遇到的问题you need to use a theme.appcompat theme (or descendant)
- 类库/框架/SDK
- 设置了Media.EXTERNAL_CONTENT_URI却找不到音频/视频的解决方法
- C++学习笔记27——泛型算法之统计(accumate count)
- iOS开发中同时识别旋转与缩放手势
- path与classpath区别,内存管理
- 项目5 - 迷宫问题之图深度优先遍历解法
- Android之GPS定位详解
- Fifteen scrum meeting 2015-11-21
- 将一个字符串转换为对应的整数
- CCNP 常用协议基本总结