不知道什么叫MQ 消息序列?没见lz帖出什么c语言啊
c socket 略有经验

解决方案 »

  1.   

    索引消息格式vc例子:
       MQOD     od = {MQOD_DEFAULT};    /* Object Descriptor             */
       MQMD     md = {MQMD_DEFAULT};    /* Message Descriptor            */
       MQPMO    pmo = {MQPMO_DEFAULT};  /* put message options           */
       MQGMO    gmo = {MQGMO_DEFAULT};  /* get message options           */
       MQRMHX   refx = {{MQRMH_DEFAULT}}; /* reference message           */
          /** note, sample uses defaults where it can **/   MQHCONN  Hcon;                   /* connection handle             */
       MQHOBJ   Hobj = MQHO_UNUSABLE_HOBJ;
                                        /* object handle                 */
       MQLONG   CompCode ;     /* completion code               */
       //MQLONG   OpenCompCode;           /* MQOPEN completion code        */
       MQLONG   ConnCode ; /* MQCONN completion code        */
       //int      rc = 0;                     /* Return code                   */
       MQLONG   Reason;                 /* reason code                   */
       MQLONG   CReason;                /* reason code for MQCONN        */
       //MQLONG   oo;                     /* MQOPEN options                */
       MQLONG   co  = MQCO_NONE;        /* MQCLOSE options               */
       MQLONG   DataLength;             /* Length of report message      */
       MQLONG   WaitInterval = 15 ;
                                        /* Wait interval                 */
       MQLONG   QMgrCCSID;              /* QMgr CodedCharSetId           */
       PMQRMH   pMQRMH;   /* -> MQRMH structure            */
       PMQXQH   pMQXQH;                 /* -> MQXQH structure            */   char     QMName[MQ_Q_MGR_NAME_LENGTH+1] = "ICBC" ;
                                        /* local queue manager name      */
       char     DestQName[MQ_Q_NAME_LENGTH+1] = "QSEND_FL.TELECOM" ;
                                        /* destination queue name        */
    //   char     DestQMName[MQ_Q_MGR_NAME_LENGTH+1] = "ZHTELECOM";
                                        /* destination qmgr name         */
       char     SourceFileName[MAX_FILENAME_LENGTH+1] = "TK02200309.15" ;
                                        /* source file name              */
       char     TargetFileName[MAX_FILENAME_LENGTH+1] = "TK02200309.15" ;
                                        /* target file name              */
       char     ObjectType[sizeof(refx.ref.ObjectType)];
                                        /* Object type                   */
       char     Buffer[sizeof(MQXQH)+MAX_MQRMH_LENGTH];    strcpy(QMName, sMQManager);
       strcpy(DestQName, sMQSendQueue);
       strcpy(SourceFileName, sFileName);
       strcpy(TargetFileName, sFileName); MQCONN( QMName                 /* queue manager                  */
               ,&Hcon                  /* connection handle              */
               ,&ConnCode              /* completion code                */
               ,&CReason );             /* reason code                    */     CompCode = ConnCode;     if (CompCode == MQCC_FAILED)
         {
      cout << "connect MQManger failed!" << endl;
      return -1;
         }     rc = prmGetQMgrCCSID(QMName
                             ,Hcon
                             ,&QMgrCCSID
                             );     if (rc != 0)
         {
           cout << "Get QMgrCCSID failed!" << endl;
           goto EXIT;
         }  memset(ObjectType,' ',sizeof(ObjectType));
      memcpy(ObjectType, "FLATFILE", sizeof("FLATFILE") - 1  );    refx.ref.StrucLength         = sizeof(refx);
         refx.ref.Encoding            = MQENC_NATIVE;
         refx.ref.CodedCharSetId      = QMgrCCSID;
         memcpy(refx.ref.Format,MQFMT_STRING
               ,(size_t)MQ_FORMAT_LENGTH);
         refx.ref.Flags               = MQRMHF_LAST;
         memcpy(refx.ref.ObjectType,ObjectType,
                sizeof(refx.ref.ObjectType));     memset(refx.SrcName
               ,' '
               ,sizeof(refx.SrcName)+sizeof(refx.DestName));     memcpy(refx.SrcName
               ,SourceFileName
               ,strlen(SourceFileName)
               );
         memcpy(refx.DestName
               ,TargetFileName
               ,strlen(TargetFileName)
               );     refx.ref.SrcNameLength = strlen(SourceFileName);
         refx.ref.SrcNameOffset = offsetof(MQRMHX,SrcName);     refx.ref.DestNameLength = strlen(TargetFileName);
         refx.ref.DestNameOffset = offsetof(MQRMHX,DestName);  memcpy(md.ReplyToQ          
               ,"QUEUE_REPORT"
               , strlen( "QUEUE_REPORT" )
                );
         strncpy(od.ObjectName
                ,DestQName
                ,sizeof(od.ObjectName)
                 );
       /* strncpy(od.ObjectQMgrName
                , "ZHTELECOM"
                , strlen( "ZHTELECOM" )
               );
        strncpy(md.ReplyToQMgr
               , "TEST"
             , strlen( "TEST" ) 
             ); */
      md.Report = MQRO_COA_WITH_FULL_DATA + MQRO_EXCEPTION_WITH_FULL_DATA; 
         pmo.Options = MQPMO_FAIL_IF_QUIESCING;
         memcpy(md.Format,MQFMT_REF_MSG_HEADER
               ,(size_t)MQ_FORMAT_LENGTH);
    //     md.Report = MQRO_COA + MQRO_EXCEPTION;     MQPUT1(Hcon,                    /* connection handle            */
                &od,                     /* object descriptor for queue  */
                &md,                     /* message descriptor           */
                &pmo,                    /* options                      */
                sizeof(refx),            /* buffer length                */
                &refx,                   /* buffer                       */
                &CompCode,               /* MQPUT1 completion code       */
                &Reason);                /* reason code                  */     if (Reason != MQRC_NONE)
         {
            cout << "MQPUT1 failed! " << endl;
        
      rc = -1;
      goto EXIT;
         }
      else cout << "发送索引消息成功!" << endl;
      
    -----------------------
      

  2.   

    MQCONN( QMName                 /* queue manager                  */
               ,&Hcon                  /* connection handle              */
               ,&ConnCode              /* completion code                */
               ,&CReason );             /* reason code  结构应该不是关键,比较想看下这个方法的代码,毕竟coon是在这里做的(我猜)然后是:rc = prmGetQMgrCCSID(QMName
                             ,Hcon
                             ,&QMgrCCSID
                             ); 在然后这个应该是传送的方法吧:MQPUT1(Hcon,                    /* connection handle            */
                &od,                     /* object descriptor for queue  */
                &md,                     /* message descriptor           */
                &pmo,                    /* options                      */
                sizeof(refx),            /* buffer length                */
                &refx,                   /* buffer                       */
                &CompCode,               /* MQPUT1 completion code       */
                &Reason);                /* reason code                  */ 这几个函数满关键的,可以的话贴下吧