C语言实现mq收发数据的函数
amqsget.c 从mq中读取消息
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cmqc.h>
#include "amqsget.h"
#include "commonfunc.h"
int mqsGet(unsigned char *sRecvBuffer)
{
MQOD
od =
{MQOD_DEFAULT};
MQMD
md =
{MQMD_DEFAULT};
MQGMO gmo =
{MQGMO_DEFAULT};
MQHCONN
Hcon;
MQHOBJ
Hobj;
MQLONG
O_options;
MQLONG
C_options;
MQLONG
CompCode;
MQLONG
OpenCode;
MQLONG
Reason;
MQLONG
CReason;
MQBYTE
buffer[65536];
MQLONG
buflen;
MQLONG
messlen;
char
QMName[50];
int iret =
0;
char
smqRecvQueNm[50];
char
smqSendQueNm[50];
char
smqQueMngNm[50];
char
smqQueOpenOptn[50];
char
smqQueClsOptn[50];
memset(smqRecvQueNm, 0,
sizeof(smqRecvQueNm));
memset(smqSendQueNm, 0,
sizeof(smqSendQueNm));
memset(smqQueMngNm, 0,
sizeof(smqQueMngNm));
memset(smqQueOpenOptn, 0,
sizeof(smqQueOpenOptn));
memset(smqQueClsOptn, 0,
sizeof(smqQueClsOptn));
memset(sRecvBuffer, 0, sizeof(buffer));
memset(buffer, 0, sizeof(buffer));
iret = ReadINIFile("MQMANAGELIST", "mqMngNm",
smqQueMngNm, "main.ini" );
if ( iret != 1 ) {
WriteLog("SEND",
"配置文件中没有找到节点[mqMngNm]\n");
return 1;
}
iret = ReadINIFile("MQMANAGELIST",
"mqQueOpenOptn", smqQueOpenOptn, "main.ini" );
if ( iret != 1 ) {
WriteLog("SEND",
"配置文件中没有找到节点[mqQueOpenOptn]\n");
return 1;
}
iret = ReadINIFile("MQMANAGELIST",
"mqQueClsOptn", smqQueClsOptn, "main.ini" );
if ( iret != 1 ) {
WriteLog("SEND",
"配置文件中没有找到节点[mqQueClsOptn]\n");
return 1;
}
iret = ReadINIFile("MQQUEUELIST", "mqRecvQueNm",
smqRecvQueNm, "main.ini" );
if ( iret != 1 ) {
WriteLog("SEND",
"配置文件中没有找到节点[mqRecvQueNm]\n");
return 1;
}
//WriteLog("SEND", "smqRecvQueNm=[%s],
smqQueMngNm=[%s], smqQueOpenOptn=[%s], smqQueClsOptn=[%s]\n\n",
smqRecvQueNm, smqQueMngNm, smqQueOpenOptn, smqQueClsOptn);
//WriteLog("SEND", "Sample AMQSGET0
start\n");
QMName[0] =
0;
strncpy(od.ObjectName, smqRecvQueNm,
MQ_Q_NAME_LENGTH);
strncpy(QMName, smqQueMngNm,
MQ_Q_MGR_NAME_LENGTH);
MQCONN(QMName,
&Hcon,
&CompCode,
&CReason);
if (CompCode == MQCC_FAILED)
{
WritePrintLog( "MQCONN ended
with reason code %d\n", CReason);
//exit( (int)CReason );
return 1;
}
if (0 != strlen(smqQueOpenOptn))
{
O_options = atoi(
smqQueOpenOptn );
//WriteLog("SEND",
"open options are %d\n", O_options);
}
else
{
O_options =
MQOO_INPUT_AS_Q_DEF
| MQOO_FAIL_IF_QUIESCING
;
}
MQOPEN(Hcon,
&od,
O_options,
&Hobj,
&OpenCode,
&Reason);
if (Reason != MQRC_NONE)
{
WritePrintLog( "MQOPEN ended
with reason code %d\n", Reason);
}
if (OpenCode == MQCC_FAILED)
{
WritePrintLog( "unable to open
queue for input\n");
return 1;
}
CompCode =
OpenCode;
gmo.Options =
MQGMO_WAIT
|
MQGMO_NO_SYNCPOINT
|
MQGMO_CONVERT;
gmo.WaitInterval =
15000;
//while (CompCode != MQCC_FAILED)
if (CompCode != MQCC_FAILED)
{
buflen = sizeof(buffer) -
1;
memcpy(md.MsgId, MQMI_NONE,
sizeof(md.MsgId));
memcpy(md.CorrelId, MQCI_NONE,
sizeof(md.CorrelId));
md.Encoding
= MQENC_NATIVE;
md.CodedCharSetId =
MQCCSI_Q_MGR;
MQGET(Hcon,
Hobj,
&md,
&gmo,
buflen,
buffer,
&messlen,
&CompCode,
&Reason);
if (Reason != MQRC_NONE)
{
if (Reason ==
MQRC_NO_MSG_AVAILABLE)
{
WritePrintLog(
"no more messages\n");
}
else
{
WritePrintLog(
"MQGET ended with reason code %d\n", Reason);
if
(Reason == MQRC_TRUNCATED_MSG_FAILED)
{
CompCode
= MQCC_FAILED;
}
}
}
if (CompCode !=
MQCC_FAILED)
{
buffer[messlen]
=
'\0';
WritePrintLog(
"message <%s>\n", buffer);
strcpy(sRecvBuffer,
buffer);
}
}
if (OpenCode != MQCC_FAILED)
{
if (0 !=
strlen(smqQueClsOptn))
{
C_options =
atoi( smqQueClsOptn );
WritePrintLog(
"close options are %d\n", C_options);
}
else
{
C_options =
MQCO_NONE;
}
MQCLOSE(Hcon,
&Hobj,
C_options,
&CompCode,
&Reason);
if (Reason != MQRC_NONE)
{
WritePrintLog(
"MQCLOSE ended with reason code %d\n", Reason);
}
}
if (CReason != MQRC_ALREADY_CONNECTED )
{
MQDISC(&Hcon,
&CompCode,
&Reason);
if (Reason != MQRC_NONE)
{
WritePrintLog(
"MQDISC ended with reason code %d\n", Reason);
}
}
if(0 == strlen(buffer)) {
//WritePrintLog("接收到的报文为空\n");
return 1;
}
else {
WritePrintLog("buffer=[%s]\n",
buffer);
strcpy(sRecvBuffer,
buffer);
}
//WriteLog("SEND", "Sample AMQSGET0
end\n");
return(0);
}
amqsput.c 向mq中发送消息
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cmqc.h>
#include "amqsput.h"
#include "commonfunc.h"
#include "codeConv.h"
int mqsPut(char * sOutBuffer)
{
FILE *fp;
MQOD
od =
{MQOD_DEFAULT};
MQMD
md =
{MQMD_DEFAULT};
MQPMO pmo =
{MQPMO_DEFAULT};
MQHCONN
Hcon;
MQHOBJ
Hobj;
MQLONG
O_options;
MQLONG
C_options;
MQLONG
CompCode;
MQLONG
OpenCode;
MQLONG
Reason;
MQLONG
CReason;
MQLONG
messlen;
char
buffer[65535];
char
QMName[50];
WritePrintLog("Sample AMQSPUT0
start\n");
int iret = 0;
char sQMName[50];
char sQInName[50];
char sQOutName[50];
char smqQueOpenOptn[50];
char smqQueClsOptn[50];
char sSendDynamicQueNm[50];
memset(sQMName, 0, sizeof(sQMName));
memset(sQInName, 0, sizeof(sQInName));
memset(sQOutName, 0, sizeof(sQOutName));
memset(smqQueOpenOptn, 0,
sizeof(smqQueOpenOptn));
memset(smqQueClsOptn, 0,
sizeof(smqQueClsOptn));
memset(sSendDynamicQueNm, 0,
sizeof(sSendDynamicQueNm));
iret = ReadINIFile("MQMANAGELIST", "mqMngNm",
sQMName, "main.ini" );
if ( iret != 1 ) {
WritePrintLog(
"配置文件中没有找到节点[mqMngNm]\n");
return 1;
}
iret = ReadINIFile("MQQUEUELIST", "mqRecvQueNm",
sQInName, "main.ini" );
if ( iret != 1 ) {
WritePrintLog(
"配置文件中没有找到节点[mqRecvQueNm]\n");
return 1;
}
iret = ReadINIFile("MQQUEUELIST", "mqSendQueNm",
sQOutName, "main.ini" );
if ( iret != 1 ) {
WritePrintLog(
"配置文件中没有找到节点[mqSendQueNm]\n");
return 1;
}
iret = ReadINIFile("MQQUEUELIST",
"mqSendDynamicQueNm", sSendDynamicQueNm, "main.ini" );
if ( iret != 1 ) {
WritePrintLog(
"配置文件中没有找到节点[mqSendDynamicQueNm]\n");
return 1;
}
iret = ReadINIFile("MQMANAGELIST",
"mqQueOpenOptn", smqQueOpenOptn, "main.ini" );
if ( iret != 1 ) {
WriteLog("SEND",
"配置文件中没有找到节点[mqQueOpenOptn]\n");
return 1;
}
iret = ReadINIFile("MQMANAGELIST",
"mqQueClsOptn", smqQueClsOptn, "main.ini" );
if ( iret != 1 ) {
WriteLog("SEND",
"配置文件中没有找到节点[mqQueClsOptn]\n");
return 1;
}
WritePrintLog( "sQMName=[%s],
sQOutName=[%s],sSendDynamicQueNm=[%s],sQInName=[%s]\n\n", sQMName,
sQOutName,sSendDynamicQueNm, sQInName);
QMName[0] =
0;
strncpy(QMName, sQMName,
(size_t)MQ_Q_MGR_NAME_LENGTH);
MQCONN(QMName,
&Hcon,
&CompCode,
&CReason);
if (CompCode == MQCC_FAILED)
{
WritePrintLog("MQCONN ended
with reason code %d\n", CReason);
exit( (int)CReason );
}
strncpy(od.ObjectName, sQOutName,
(size_t)MQ_Q_NAME_LENGTH);
WritePrintLog("target queue is %s\n",
od.ObjectName);
//if (argc > 5)
{
strncpy(od.ObjectQMgrName, QMName, (size_t)
MQ_Q_MGR_NAME_LENGTH);
WritePrintLog("target queue manager is %s\n",
od.ObjectQMgrName);
}
//if (argc > 6)
{
strncpy(od.DynamicQName, sSendDynamicQueNm,
(size_t) MQ_Q_NAME_LENGTH);
WritePrintLog("dynamic queue name is %s\n",
od.DynamicQName);
}
if (0 != strlen(smqQueOpenOptn))
{
O_options = atoi(
smqQueOpenOptn );
WritePrintLog("open
options are %d\n", O_options);
}
else
{
O_options =
MQOO_OUTPUT
|
MQOO_FAIL_IF_QUIESCING
;
}
MQOPEN(Hcon,
&od,
O_options,
&Hobj,
&OpenCode,
&Reason);
if (Reason != MQRC_NONE)
{
WritePrintLog("MQOPEN ended
with reason code %d\n", Reason);
}
if (OpenCode == MQCC_FAILED)
{
WritePrintLog("unable to open
queue for output\n");
}
CompCode =
OpenCode;
fp = stdin;
memcpy(md.Format,
MQFMT_STRING,
(size_t)MQ_FORMAT_LENGTH);
pmo.Options = MQPMO_NO_SYNCPOINT
| MQPMO_FAIL_IF_QUIESCING;
if (CompCode != MQCC_FAILED)
{
//if (fgets(buffer,
sizeof(buffer), fp) != NULL)
//{
// messlen =
(MQLONG)strlen(buffer);
//if (buffer[messlen-1] ==
'\n')
//{
//
buffer[messlen-1] =
'\0';
//
--messlen;
//}
// }
//else messlen =
0;
strcpy(buffer,
sOutBuffer);
messlen = strlen(buffer);
char *szOut;
char sTbuffer[65535];
memset(sTbuffer, 0,
sizeof(sTbuffer));
szOut = u2g(buffer);
strcpy(sTbuffer, szOut);
free(szOut);
if (messlen >
0)
{
WritePrintLog("MQPUT===============buffer[%s][%d]\n",
sTbuffer, strlen(sTbuffer));
memcpy(md.MsgId,
MQMI_NONE,
sizeof(md.MsgId) );
MQPUT(Hcon,
Hobj,
&md,
&pmo,
messlen,
buffer,
&CompCode,
&Reason);
if (Reason !=
MQRC_NONE)
{
WritePrintLog("MQPUT
ended with reason code %d\n", Reason);
}
}
else
CompCode =
MQCC_FAILED;
}
if (OpenCode != MQCC_FAILED)
{
if (0 !=
strlen(smqQueClsOptn))
{
C_options =
atoi( smqQueClsOptn );
WritePrintLog("close
options are %d\n", C_options);
}
else
{
C_options =
MQCO_NONE;
}
MQCLOSE(Hcon,
&Hobj,
C_options,
&CompCode,
&Reason);
if (Reason != MQRC_NONE)
{
WritePrintLog("MQCLOSE
ended with reason code %d\n", Reason);
}
}
if (CReason != MQRC_ALREADY_CONNECTED)
{
MQDISC(&Hcon,
&CompCode,
&Reason);
if (Reason != MQRC_NONE)
{
WritePrintLog("MQDISC
ended with reason code %d\n", Reason);
}
}
WritePrintLog("Sample AMQSPUT0 end\n");
return(0);
}
C语言实现mq收发数据的函数的更多相关文章
- dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象
//-------------------------------------------------------------------------------------------- - //D ...
- dsp28377控制DM9000收发数据
首先感谢上一篇转载文章的作者给出的参考,下面是一些自己在调试过程中的一些步骤: 首先把代码贴上来: //------------------------------------------------ ...
- 【C语言入门教程】5.2 函数的作用域规则(auto, static)
作用域规则是指代码或数据的有效使用范围.C语言将函数作为独立的代码块,函数之间不能相互访问其内部的代码或数据.函数间数据的传递只能通过接口实现.但是,变量的定义方法可改变函数的作用域规则,可将变量分为 ...
- iOS开发之音频口通信-通过方波来收发数据
之前做过的项目有需要通过音频口通信用方波来收发数据,由于这方面的资料比较少,下面就介绍下其原理,希望能给大家帮助. 一. 音频通信简介大家应该都知道支付宝声波支付和拉卡拉吧,它们都是利用手机的音频口( ...
- 【AT91SAM3S】串口UART初始化及收发数据
SAM3S中的UART串口是一个两线异步收发器.这个串口能用来通信或者跟踪.有两个DMA通道与UART串口关联,可通过使用DMA处理串口传输以节省CPU时间. SAM3S4C中有两个UART.与外设引 ...
- R语言中的横向数据合并merge及纵向数据合并rbind的使用
R语言中的横向数据合并merge及纵向数据合并rbind的使用 我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同.处理的办法就是使用merge(x, y ,by.x = ,by.y ...
- R语言系列:生成数据
R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...
- 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成
孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
随机推荐
- EasyUI学习总结(二)——easyloader分析与使用(转载)
本文转载自:http://www.cnblogs.com/haogj/archive/2013/04/22/3036685.html 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除 ...
- 微软BI 之SSRS 系列 - 使用文档结构导航报表元素 Document Map
在 SSRS 中也有类似于 Word 文档中的那种导航的效果 - 左侧部分,可以通过导航地图快速的定位到国家下的省份或者城市,并且这种层次结构是由在创建行分组时定义的. 比如说下面的这个例子中,我分了 ...
- spark run using IDE / Maven
来自:http://stackoverflow.com/questions/26892389/org-apache-spark-sparkexception-job-aborted-due-to-st ...
- Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画
Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画 0.首先.先给出一张效果gif图. 1.贝塞尔曲线原理及相关公式參考:http://www.jianshu.com/p/c0d7ad79 ...
- 【SqlServer】SqlServer的游标使用
什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据 ...
- dos命令dir查找文件的用法及实例
功能:显示目录命令 格式:dir[盘符][路径][/W][/P][/L][/O:排序][/A:属性][/S] 参数介绍: /W -- 以宽行排列方式显示. /P -- 每显示满一屏停顿一下,待用户 ...
- synchronized和lock比较
一.synchronized的实现方案 1.synchronized能够把任何一个非null对象当成锁,实现由两种方式: a.当synchronized作用于非静态方法时,锁住的是当前对象的事例,当s ...
- oradim新建服务后,登录数据库报ORA-12560错误
> oradim -new -sid mydb 实例已创建. > sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Production on 星期二 ...
- Apache Spark 2.3.0 重要特性介绍
文章标题 Introducing Apache Spark 2.3 Apache Spark 2.3 介绍 Now Available on Databricks Runtime 4.0 现在可以在D ...
- Fluent动网格【1】:概述
最近总有小伙伴向我询问Fluent中的动网格问题,因此决定做一期关于Fluent动网格技术的内容. 动网格技术在流体仿真中很特殊,应用也很广.生活中能够碰到形形色色的包含有部件运动的问题,比如说我现在 ...