MIB信息查询
1. 实现功能
查询MIB,提取字段信息。本文主要介绍提取:客户端ID、客户端名、用户名。
2. 设置环境变量
www.2cto.com第一个环境变量:
FLDTBLDIR32=$APPDIR:$TUXDIR/udataobj
第二个环境变量:
FIELDTBLS32=bank_fml,rtpnr_fml,common_fml,ui_fml,openpnr.fml32,open_detr_fml,tpadm,Usysfl32,evt_mib
3. 结构设计
目的:通过客户查询服务端MIB信息
4. 代码设计
客户端代码:
#include <userlog.h>
#include <Uunix.h>
#include <atmi.h>
#include <boost/thread/thread.hpp>
#include <string.h>
#include <string>
#include <fml32.h>
#include <evt_mib.h>
using namespace std;
int main(int argc, char* argv[])
{
string logName = "mylog";
string cltName = "cltname";
string usrName = "usrname";
for(int i = 1; i < argc; i++)
{
if(i == 1)
{
logName = argv[i];
}
else if(i == 2)
{
cltName = argv[i];
}
else if(i == 3)
{
usrName = argv[3];
}
else
{
break;
}
}
TPINIT *userinfo=(TPINIT*)tpalloc("TPINIT",(char *)NULL,TPINITNEED(168));
strcpy (userinfo->cltname, cltName.c_str());
//strcpy (userinfo->grpname, "AA");
//strcpy (userinfo->passwd, "123456");
strcpy (userinfo->usrname, usrName.c_str());
userinfo->datalen = 100;
if ( tpinit(userinfo) == -1)
{
printf("tpinit error\n");
printf("init:%s\n",tpstrerror(tperrno));
}
FBFR32 *iData = (FBFR32*)tpalloc (FMLTYPE32, NULL, 5000L);
Fchg32 (iData, TA_OPERATION, 0, "GET", 0);
Fchg32 (iData, TA_CLASS, 0, "T_CLIENT", 0);
FILE * fp=fopen(logName.c_str(),"w+");
long lLen = Fsizeof32 (iData);
if (tpcall (".TMIB", (char*)iData, (long)0, (char**)&iData, &lLen, (long)(TPSIGRSTRT | TPNOTRAN)) == 0)
{
// long lerrno = Fvall32 ( iData, TA_ERROR, 0 );
printf("tpcall success!\n");
int eveCount = Fnum32(iData);
char buffer[1024];
string logstr("");
for(int i = 0; i < eveCount; i++)
{
if(-1 != Fgets32(iData, TA_CLIENTID, i, buffer))
{
logstr = "TA_CLIENTID ";
logstr += buffer;
logstr += '\n';
fputs(logstr.c_str(), fp);
}
if(-1 != Fgets32(iData, TA_USRNAME, i, buffer))
{
logstr = "TA_USRNAME ";
logstr += buffer;
logstr += '\n';
fputs(logstr.c_str(), fp);
}
if(-1 != Fgets32(iData, TA_CLTNAME, i, buffer))
{
logstr = "TA_CLTNAME ";
logstr += buffer;
logstr += '\n';
fputs(logstr.c_str(), fp);
}
}
}
else
{
printf ( "tpcall error:%d:%s\n", tperrno, tpstrerror(tperrno) );
}
fclose(fp);
boost::this_thread::sleep(boost::posix_time::milliseconds(1000*1000));
tpterm();
return 0;
}
5. 服务端设置
关掉tuxedo服务器的安全配置,即如果ubb中设置了"SECURITY ACL"需要注释掉,这并不代表配置了安全就不支持客户部查询MIB了,只是多了些约束而已。
6. 运行和结果
运行:
Test2 是我编译后的可执行文件名。mylog是日志名,clt1 是客户端名,usr1 是用户名, 这都是参数而已。
结果(结果放在mylog里面):
日志结果: