⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 visual c# 网络编程技术与实践实例包括几个源码
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Net;
using System.Net.Sockets;

namespace SNMPApp_bookExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void nameBtn_Click(object sender, EventArgs e)
        {
            //若必需信息没有填写完全,则退出该段程序
            if (!checkTextBox())
                return;

            //获得主机地址与团体名
            string hoststr = hostTextBox.Text.ToString();
            string comstr = comTextBox.Text.ToString();
            //初始化收到的SNMP响应包
            byte[] resstr = new byte[1024];
            //初始化一个SNMP对象msg
            SNMP msg = new SNMP();
            
            //向主机发送SNMP消息 查询位于"1.3.6.1.2.1.1.5.0"的对象的值
            resstr = msg.getMessage("get",hoststr,comstr,"1.3.6.1.2.1.1.5.0");

            //若返回消息的首字节为0xff 说明传输失败
            if (0xff == resstr[0])
            {
                //弹出错误消息 并返回
                MessageBox.Show("没有收到来自 "+hoststr+" 的消息。");
                return;
            }
            
            //若传输成功 则显示设备位置信息
            resultListBox.Items.Add("设备的网络名称:");
            //获得团体名长度
            int comleng = Convert.ToInt16(resstr[6]);
            //获得MIB对象长度
            int mibleng = Convert.ToInt16(resstr[23 + comleng]);

            //获得设备位置信息的数据类型
            int datatype = Convert.ToInt16(resstr[24 + comleng + mibleng]);
            //获得信息的长度
            int dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
            //计算出信息的起始下标
            int datastart = 26 + comleng + mibleng;
            //通过信息的起始下标与信息长度获得设备位置信息的字符串
            string outprint = Encoding.ASCII.GetString(resstr, datastart, dataleng);
            //将信息输出到ListBox中
            resultListBox.Items.Add("数据类型为:" + datatype + ",值为: " + outprint);
            return;
        }

        private void addBtn_Click(object sender, EventArgs e)
        {
            //若必需信息没有填写完全,则退出该段程序
            if (!checkTextBox())
                return;

            //获得主机地址与团体名
            string hoststr = hostTextBox.Text.ToString();
            string comstr = comTextBox.Text.ToString();
            //初始化收到的SNMP响应包
            byte[] resstr = new byte[1024];
            SNMP msg = new SNMP();

            //向主机发送SNMP消息 查询位于"1.3.6.1.2.1.1.6.0"的对象的值
            resstr = msg.getMessage("get", hoststr,comstr, "1.3.6.1.2.1.1.6.0");

            //若返回消息的首字节为0xff 说明传输失败
            if (resstr[0] == 0xff)
            {
                MessageBox.Show("没有收到来自 " + hoststr + " 的消息。");
                return;
            }

            //若传输成功 则显示设备位置信息
            resultListBox.Items.Add("设备的位置:");
            //获得团体名长度
            int comleng = Convert.ToInt16(resstr[6]);
            //获得MIB对象长度
            int mibleng = Convert.ToInt16(resstr[23 + comleng]);
            
            //获得信息
            //获得信息类型
            int datatype = Convert.ToInt16(resstr[24 + comleng + mibleng]);
            //获得信息长度
            int dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
            //获得信息在SNMP包中的开始下标
            int start = 26 + comleng + mibleng;
            //获得设备的位置信息 并存入outprint字符串中
            string outprint = Encoding.ASCII.GetString(resstr, start, dataleng);
            //显示设备的位置信息
            resultListBox.Items.Add("地址信息类型为: " + datatype + ",值为:   " + outprint);
            return;
        }

        private void runtimeBtn_Click(object sender, EventArgs e)
        {
            //若必需信息没有填写完全,则退出该段程序
            if (!checkTextBox())
                return;

            //获得主机地址与团体名
            string hoststr = hostTextBox.Text.ToString();
            string comstr = comTextBox.Text.ToString();
            //初始化收到的SNMP响应包
            byte[] resstr = new byte[1024];
            SNMP msg = new SNMP();
            int runtime=0;

            //向主机发送SNMP消息 查询位于"1.3.6.1.2.1.1.3.0"的对象的值
            resstr = msg.getMessage("get", hoststr,comstr, "1.3.6.1.2.1.1.3.0");

            //若返回消息的首字节为0xff 说明传输失败
            if (resstr[0] == 0xff)
            {
                MessageBox.Show("没有收到来自 " + hoststr + " 的消息。");
                return;
            }

            //若传输成功 则显示设备启动时间信息
            resultListBox.Items.Add("设备的启动时间:");
            //获得团体名长度
            int comleng = Convert.ToInt16(resstr[6]);
            //获得MIB对象长度
            int mibleng = Convert.ToInt16(resstr[23 + comleng]);

            //获得消息
            //获得信息类型
            int datatype = Convert.ToInt16(resstr[24 + comleng + mibleng]);
            //获得信息长度
            int dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
            //获得信息在SNMP包中的开始下标
            int start = 26 + comleng + mibleng;

            //如果时间数据的长度大于0
            while (dataleng > 0)
            {
                //时间数据的首字符左移8位
                runtime = (runtime << 8) + resstr[start++];
                dataleng--;
            }
            //显示设备的运行时间信息
            resultListBox.Items.Add("设备的运行时间类型为:" + datatype + ",值为: " +runtime);
            return;
        }

        private void ipAddBtn_Click(object sender, EventArgs e)
        {
            //若必需信息没有填写完全,则退出该段程序
            if (!checkTextBox())
                return;

            int comleng, mibleng, start, dataleng,curmibleng;
            string value;
            //将需要查询的对象标识符放入mib字符串中
            string mib = "1.3.6.1.2.1.4.22.1";
            string nextstr = mib;
            //获得主机地址与团体名
            string hoststr = hostTextBox.Text.ToString();
            string comstr = comTextBox.Text.ToString();
            //获得对象标识符的长度
            curmibleng=mib.Length;
            //初始化收到的SNMP响应包
            byte[] resstr = new byte[1024];
            //初始化SNMP对象
            SNMP msg = new SNMP();

            //开始接受消息
            //接受该节点下的所有消息
            while (true)
            {
                //向主机发送SNMP消息 查询位于"1.3.6.1.2.1.4.22.1"的对象的值
                //并获得下一个MIB对象标识符的位置
                resstr=msg.getMessage("getnext",hoststr,comstr,nextstr);
                //若返回消息的首字节为0xff 说明传输失败
                if (resstr[0] == 0xff)
                {
                    MessageBox.Show("没有收到来自 " + hoststr + " 的消息。");
                    return;
                }

                //获得团体名长度
                comleng = Convert.ToInt16(resstr[6]);
                //获得MIB对象长度
                mibleng = Convert.ToInt16(resstr[23+comleng]);
                //获得信息长度
                dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
                //计算出信息在SNMP包中的开始下标
                start = 26 + comleng + mibleng;

                //获得网络设备的IP地址映射表
                value = BitConverter.ToString(resstr,start,dataleng);
                //获得下一个MIB对象标识符
                nextstr = msg.nextMIBMessage(resstr);
                //若下一个MIB对象标识符与初始查询的MIB对象标识符是同一级别的则跳出循环
                if (!(nextstr.Substring(0, curmibleng) == mib))
                    break;
                //选择输出映射表中的物理地址
                if(6==dataleng)
                    resultListBox.Items.Add(nextstr+" = " +value);
             }
             return;
        }

        private void clearBtn_Click(object sender, EventArgs e)
        {
            resultListBox.Items.Clear();
        }

        public bool checkTextBox()
        {
            //如果主机地址或团体名为空
            if (("" == hostTextBox.Text) || ("" == comTextBox.Text))
            {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -