我现在是在UDP上实现SNMP数据包的编码和解码,
主要是为了以后的各个版本兼容问题。现在编码
和解码都已经实现。其中解码函数能够解出网络
上发过来的SNMP数据包,而我生成的数据包发送
到其他SNMP代理上,在UDP上接收的时候,返回
错误,错误代码为10054,意思是(An existing
connection was forcibly closed by the remote
host. )不知道是什么原因?既然解码都能通过,
那为什么SNMP代理不认我的数据包呢?就算我的
格式错误也应该返回一个SNMP格式的错误说明啊!
怎么会产生socket错误呢?
主要是为了以后的各个版本兼容问题。现在编码
和解码都已经实现。其中解码函数能够解出网络
上发过来的SNMP数据包,而我生成的数据包发送
到其他SNMP代理上,在UDP上接收的时候,返回
错误,错误代码为10054,意思是(An existing
connection was forcibly closed by the remote
host. )不知道是什么原因?既然解码都能通过,
那为什么SNMP代理不认我的数据包呢?就算我的
格式错误也应该返回一个SNMP格式的错误说明啊!
怎么会产生socket错误呢?
所以,我从未碰到这种问题.
我生成了一个隐含窗口用于端口消息的接收,接收WM_SNMP和WM_TRAP消息。当我在主窗口菜单下选择 发送SNMP数据包 菜单时,会调用我自己的SNMP数据包编码函数,填入相关的信息。然后sendto本局域网内的一台机器。发过去就不管了,对方机器上有SNMP服务,在接收到我的数据包后,如果是正确的话,因该返回我指定的OID的先对应的值,但是现在是返回了什么我也不知道,反正是现在在我的隐含窗口的消息处理函数中,recvform()函数返回-1,用GetLastError()函数取了错误值为10054。如果正常的话,应该进入解码函数,得出值才对啊!
不知道是不是 Microsoft 是不是在Snmp上作了什么手脚?有可能吗?
2.你发送数据的地址错误,根本就没有发送到你要发送的那台机器,所以你收不到任何错误信息。
3.你的目的机器程序有问题,它根本就没接受到你发过去的东西。
4.你的recvform()的接收地址和时机是否有错?我觉得可能就是以上错误,你可以再仔细查看一下。
2:地址绝对没错,而且已经发到对方机器。
3:接受程序没问题,因为它只有在161端口上有数据才会中断,而且我们有一台HP OPENVIEW的服务器平时的数据报它都能解出来,只不过它的值为空,因为它是在实时查询网络主机的信息,所以值为空。
4:肯定不会有错。不过倒是可以考虑一下抓取对方返回的数据报,不过这几天没空还没试过。