SNMP协议;结构体;socket传输;转换字符串;导出txt。

BRUCE叹气 2013-05-29 09:55:58
通过SnmpMgrRequest函数,可以把选取的OID的信息返回到variableBindings这个结构体里。
然后我想把这个结构体通过socket发送到服务器端。
但variableBindingsp这个结构体里的组员特别多。并且每次返回值的时候,不是每个组员都有值。
所以似乎无法用socket直接发送。
但用SnmpUtilPrintAsnAny这个函数又可以把数值打印出来。

如果能把这个结构体里面的的值都转换成字符串,就可以发送了。但因为结构体的长度是不定的所以不知道该怎么转换。

如果能把这个结构体的值输出成一个TXT文档,也可以发送了。但也不知道如何去输出。我试着用重定向的方法了,但freopen只能把printf输出到TXT。

结构体里面的AsnObjectName name可以顺利输出,
但AsnObjectSyntax value这个每次通过SnmpMgrRequest取值,里面的组员数量都不一样。

这个问题已经困扰了我很久了,希望大家帮忙想想办法。主要是要把value这个结构体的内容传到服务器能让对方看到。

下面给出结构体的内容。

typedef struct {
AsnObjectName name;
AsnObjectSyntax value;
} variableBindings;

typedef AsnObjectIdentifier AsnObjectName;
typedef AsnAny AsnObjectSyntax;

typedef struct {
BYTE asnType;
union {
AsnInteger32 number; // ASN_INTEGER
// ASN_INTEGER32
AsnUnsigned32 unsigned32; // ASN_UNSIGNED32
AsnCounter64 counter64; // ASN_COUNTER64
AsnOctetString string; // ASN_OCTETSTRING
AsnBits bits; // ASN_BITS
AsnObjectIdentifier object; // ASN_OBJECTIDENTIFIER
AsnSequence sequence; // ASN_SEQUENCE
AsnIPAddress address; // ASN_IPADDRESS
AsnCounter32 counter; // ASN_COUNTER32
AsnGauge32 gauge; // ASN_GAUGE32
AsnTimeticks ticks; // ASN_TIMETICKS
AsnOpaque arbitrary; // ASN_OPAQUE
} asnValue;
} AsnAny;
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jncryang 2013-05-30
  • 打赏
  • 举报
回复
思路如下: 根据asnType类型,计算出AsnObjectSyntax的尺寸,该结构体内部内嵌了联合体,需要动态计算尺寸。 然后根据计算得到的申请内存byte *pByte = new byte[size],将数值一次memcpy到内存中去。 然后用socket发送给服务器。服务器端反向解析就可以了。
BRUCE叹气 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 Jncryang 的回复:
思路如下: 根据asnType类型,计算出AsnObjectSyntax的尺寸,该结构体内部内嵌了联合体,需要动态计算尺寸。 然后根据计算得到的申请内存byte *pByte = new byte[size],将数值一次memcpy到内存中去。 然后用socket发送给服务器。服务器端反向解析就可以了。
这位大神,动态计算怎么实现啊?我没查到。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧