zoukankan      html  css  js  c++  java
  • 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] ");
      return 1;
     }

     iret = ReadINIFile("MQMANAGELIST", "mqQueOpenOptn", smqQueOpenOptn, "main.ini" );
     if ( iret != 1 ) { 
      WriteLog("SEND", "配置文件中没有找到节点[mqQueOpenOptn] ");
      return 1;
     }

     iret = ReadINIFile("MQMANAGELIST", "mqQueClsOptn", smqQueClsOptn, "main.ini" );
     if ( iret != 1 ) { 
      WriteLog("SEND", "配置文件中没有找到节点[mqQueClsOptn] ");
      return 1;
     }

     
     iret = ReadINIFile("MQQUEUELIST", "mqRecvQueNm", smqRecvQueNm, "main.ini" );
     if ( iret != 1 ) { 
      WriteLog("SEND", "配置文件中没有找到节点[mqRecvQueNm] ");
      return 1;
     }

     //WriteLog("SEND", "smqRecvQueNm=[%s], smqQueMngNm=[%s], smqQueOpenOptn=[%s], smqQueClsOptn=[%s] ", smqRecvQueNm, smqQueMngNm, smqQueOpenOptn, smqQueClsOptn);
     //WriteLog("SEND", "Sample AMQSGET0 start ");

     
     
     
     
     
     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 ", CReason);
      //exit( (int)CReason );
      return 1;
     }

     
     
     
     
     
     

     
     if (0 != strlen(smqQueOpenOptn))
     {
      O_options = atoi( smqQueOpenOptn );
      //WriteLog("SEND", "open  options are %d ", 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 ", Reason);
     }

     if (OpenCode == MQCC_FAILED)
     {
      WritePrintLog( "unable to open queue for input ");
      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 ");
       }
       else
       {
        WritePrintLog( "MQGET ended with reason code %d ", Reason);
        
        if (Reason == MQRC_TRUNCATED_MSG_FAILED)
        {
         CompCode = MQCC_FAILED;
        }
        
       }
      }

      
      
      
      if (CompCode != MQCC_FAILED)
      {
       buffer[messlen] = '';           
       WritePrintLog( "message <%s> ", buffer);
       strcpy(sRecvBuffer, buffer);
      }

      
       
     }

     
     
     
     
     
     if (OpenCode != MQCC_FAILED)
     {
      if (0 != strlen(smqQueClsOptn))
      {
       C_options = atoi( smqQueClsOptn );
       WritePrintLog( "close options are %d ", 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 ", Reason);
      }
     }

     
     
     
     
     
     if (CReason != MQRC_ALREADY_CONNECTED )
     {
      MQDISC(&Hcon,                    
       &CompCode,                
       &Reason);                 

      
      if (Reason != MQRC_NONE)
      {
       WritePrintLog( "MQDISC ended with reason code %d ", Reason);
      }
     }


     if(0 == strlen(buffer)) {
      //WritePrintLog("接收到的报文为空 ");
      return 1;
     }
     else {
      WritePrintLog("buffer=[%s] ", buffer);
      strcpy(sRecvBuffer, buffer);
     }

     
     
     
     
     
     //WriteLog("SEND", "Sample AMQSGET0 end ");
     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 ");
     

     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] ");
      return 1;
     }

     
     iret = ReadINIFile("MQQUEUELIST", "mqRecvQueNm", sQInName, "main.ini" );
     if ( iret != 1 ) { 
      WritePrintLog( "配置文件中没有找到节点[mqRecvQueNm] ");
      return 1;
     }

     
     iret = ReadINIFile("MQQUEUELIST", "mqSendQueNm", sQOutName, "main.ini" );
     if ( iret != 1 ) { 
      WritePrintLog( "配置文件中没有找到节点[mqSendQueNm] ");
      return 1;
     }
     
     iret = ReadINIFile("MQQUEUELIST", "mqSendDynamicQueNm", sSendDynamicQueNm, "main.ini" );
     if ( iret != 1 ) { 
      WritePrintLog( "配置文件中没有找到节点[mqSendDynamicQueNm] ");
      return 1;
     }

     iret = ReadINIFile("MQMANAGELIST", "mqQueOpenOptn", smqQueOpenOptn, "main.ini" );
     if ( iret != 1 ) { 
      WriteLog("SEND", "配置文件中没有找到节点[mqQueOpenOptn] ");
      return 1;
     }

     iret = ReadINIFile("MQMANAGELIST", "mqQueClsOptn", smqQueClsOptn, "main.ini" );
     if ( iret != 1 ) { 
      WriteLog("SEND", "配置文件中没有找到节点[mqQueClsOptn] ");
      return 1;
     }


        WritePrintLog( "sQMName=[%s], sQOutName=[%s],sSendDynamicQueNm=[%s],sQInName=[%s] ", 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 ", CReason);
      exit( (int)CReason );
     }

     
     
     
     
     
     strncpy(od.ObjectName, sQOutName, (size_t)MQ_Q_NAME_LENGTH);
     WritePrintLog("target queue is %s ", od.ObjectName);
     
     //if (argc > 5)
     {
     strncpy(od.ObjectQMgrName, QMName, (size_t) MQ_Q_MGR_NAME_LENGTH);
     WritePrintLog("target queue manager is %s ", od.ObjectQMgrName);
     }

     //if (argc > 6)
     {
     strncpy(od.DynamicQName, sSendDynamicQueNm, (size_t) MQ_Q_NAME_LENGTH);
     WritePrintLog("dynamic queue name is %s ", od.DynamicQName);
     }

     
     
     
     
     
     if (0 != strlen(smqQueOpenOptn))
     {
      O_options = atoi( smqQueOpenOptn );
      WritePrintLog("open  options are %d ", 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 ", Reason);
     }

     if (OpenCode == MQCC_FAILED)
     {
      WritePrintLog("unable to open queue for output ");
     }

     
     
     
     
     
     
     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] == ' ') 
      //{
      // buffer[messlen-1]  = '';   
      //  --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] ", 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 ", Reason);
       }
      }
      else  
       CompCode = MQCC_FAILED;
     }

     
     
     
     
     
     if (OpenCode != MQCC_FAILED)
     {
      if (0 != strlen(smqQueClsOptn))
      {
       C_options = atoi( smqQueClsOptn );
       WritePrintLog("close options are %d ", 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 ", Reason);
      }
     }

     
     
     
     
     
     if (CReason != MQRC_ALREADY_CONNECTED)
     {
      MQDISC(&Hcon,                  
       &CompCode,              
       &Reason);               

      
      if (Reason != MQRC_NONE)
      {
       WritePrintLog("MQDISC ended with reason code %d ", Reason);
      }
     }

     


     
     
     
     
     WritePrintLog("Sample AMQSPUT0 end ");
     return(0);
     }

  • 相关阅读:
    js正则还原和转义特殊字符
    element表格鼠标悬浮上带有点击事件的变红-:row-class-name
    elemen-table表格数据转换-formatter属性
    SVN的安装及汉化的
    element中关于input框
    VUE之兄弟组件 $emit和$on、$bus的用法
    关于element表单校验(二)
    关于element表单校验(一)
    element表格里数据处理
    各类手册收藏整理
  • 原文地址:https://www.cnblogs.com/dpf-learn/p/8556623.html
Copyright © 2011-2022 走看看