利用消息队列实现多进程通信过程

利用消息队列实现多进程通信过程

ID:8834154

大小:378.50 KB

页数:17页

时间:2018-04-09

利用消息队列实现多进程通信过程_第1页
利用消息队列实现多进程通信过程_第2页
利用消息队列实现多进程通信过程_第3页
利用消息队列实现多进程通信过程_第4页
利用消息队列实现多进程通信过程_第5页
资源描述:

《利用消息队列实现多进程通信过程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、成绩:课程设计报告课程名称:Unix课程设计设计题目:利用消息队列实现多进程通信过程姓名:专业:网络工程班级:学号:计算机科学与技术学院网络系2013年12月30日哈尔滨理工大学计算机科学与技术学院网络系实验室实验报告一、选题背景在UNIX程序设计中消息队列是使用频率最高的几个对象之一,它常应用于对等进程间的通信和客户—服务器之间的通信。采用消息队列作为货物托运渠道可以弥补以下缺陷:(1)消息队列是一种先进先出的队列型数据结构,可以保证先送的货物先到达,后送的货物后到达,避免了插队现象。(2)消息队列将输出的信息进行了打包处理,这样就可以保证以每个消息为单位进行接收了

2、。(3)消息队列还可以将货物进行分类服务,标记各种类别的服务,这样就可以根据货物类别分别出货。消息队列是IPC对象的一种与同样提供先进先出服务的管道相比,它有如下特点:(1)消息队列提供了消息的自动拆分功能,同时不能接收两次发送的消息。(2)消息队列提供了不完全随机读取的服务,引入消息类型后,一个消息队列在逻辑上可以化身为多个不同消息类型的链表,用户可以自主选择接收某条逻辑链表上的消息,而不必依次接收队列的首条消息。(3)消息队列提供了完全异步的读写服务。基于以上背景,我们发现利用消息队列实现进程间的通信可以为我们提供方便,也会是通信效率更为提高。二、设计思路可以采用

3、客户-服务器结构,其中服务器端实现各个用户的登录并存储相关信息,客户端通过服务器端获取当前登录用户信息,然后各客户进程通过消息队列实现双向通信。编程实现两个进程间的通信,一个server(服务器)进程,一个client(客户)进程。在client(客户)进程下选择注册或者登陆。若是注册,则server(服务器)进程分给该客户一个新的登陆账号。多个客户的账号存储在register.txt文件中。若是选择登陆,登陆成功后服务器进程会显示登陆成功,否则显示登陆失败。登陆后输入你要发送消息的对方的账号,输入账号后,服务器方显示该账号是否合理,如合理,即可实行通信。三、主要问题

4、的解决方法和关键技术实现密码格式登录与注册,通过帐号显示用户名,显示发送消息的日期四、程序流程图哈尔滨理工大学计算机科学与技术学院网络系实验室实验报告一、原程序清单//client.c#include#include#include#include#include#include#include#includestructmsgbuf{longtype;charbuf[1024];};structmsg

5、buf0{longtype;pid_tpid;charusername[48];charpassword[48];charnumber[28];};voidfunc();voidregist();//注册voidpassw();voidinputpassw(char*P);voidenter();//登录哈尔滨理工大学计算机科学与技术学院网络系实验室实验报告voiddata();voidstol(char*);//加密voidltos(char*);//解密structmsgbuf_msgbuf;structmsgbuf0_msgbuf0,_msgbuf1;intms

6、gid,index,flag;longnumber;pid_tpid,pid1;FILE*fpr;charusername[16],password[16],buf[64],inde[4],flg[4];voidmain(){//28pid_tpid=getpid();if((msgid=msgget(0x4321,0666

7、IPC_CREAT))<0){fprintf(stderr,"msgget()failed.");return;}fprintf(stderr,"注册pleaseinput'z',登录input'd':");scanf("%s",buf);m

8、emset(&_msgbuf0,0,sizeof(_msgbuf0));if(buf[0]==100){enter();//登录}elseif(buf[0]==122){regist();//注册}}voidfunc(){memset(&_msgbuf,0,sizeof(_msgbuf));_msgbuf.type=atoi(_msgbuf0.username)+100;while(msgrcv(msgid,&_msgbuf,sizeof(_msgbuf.buf),_msgbuf.type,IPC_NOWAIT)!=-1){fprintf(stder

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。