zoukankan      html  css  js  c++  java
  • C# IP地址段端口扫描器封装调用

    上一篇IP地址段端口扫描器是独立使用的,为了方便以后的程序调用,把它封装成DLL。首先新建名为“SearcherIPPort ”的类库,为了规范,把窗体都重新命名,然后增加到新的工程中,注意一定不要忘记把命名空间也改了,窗体“frmSet.cs”(指定IP地址段和端口)是通过事件传值把要搜索的IP地址段和端口传给“frmSearcher.cs”(搜索窗体)。搜索到IP地址和端口后还要把值传给调用的窗体。代码下载

    Searcher1

    一、在SearcherIPPort工程新增加一个类,名为SearchrSendEventArgs,继承EventArgs

    生成属性,输入 pro ,把光标移动到propfull(显示的这几个都可以试试)。然后按TAB键会自动生成属性代码,然后再次按TAB键会在可以更改的值里移动,最后改完了按回车完成,如下图

    Searcher6     Searcher7

    public class SearchrSendEventArgs:EventArgs
    {
        private string ip;
        public string IP
        {
            get { return ip; }
            set { ip = value; }
         }
    
        private int port;
        public int Port
        {
            get { return port; }
            set { port = value; }
         }
        
        public SearchrSendEventArgs(string ip, int port)
        {
            this.ip = ip;
            this.port = port;
        }  
    }

    二、frmSearcher 窗体声明委托和事件

    public delegate void SearchrSendDeletegate(object sender, SearchrSendEventArgs e);
    public event SearchrSendDeletegate SearcherSendEvent;
    在搜索窗体ListBox显示的IP地址和端口是 192.168.1.124:1234 格式的,所以需要解析,并返回。
    /// <summary>
    /// 解析IP地址和端口
    /// </summary>
    /// <param name="lstbox"></param>
    private void ParseIPPort(ListBox lstbox)
    {
        if (lstbox.Items.Count > 0)
        {
            if (lstbox.SelectedItems.Count > 0)
            {
                string[] strarr = lstbox.SelectedItem.ToString().Split(':');
                SendValue(strarr[0], Convert.ToInt32(strarr[1]));
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                string[] strarr = lstbox.Items[0].ToString().Split(':');
                SendValue(strarr[0], Convert.ToInt32(strarr[1]));
                this.DialogResult = DialogResult.OK;
             }
          }
          else
          {
              MessageBox.Show("没有扫描到设备!");
           }
    }
    
            //发送事件
            private void SendValue(string IP,  int Port)
            {
                if (SearcherSendEvent != null)
                {
                    SearcherSendEvent(this, new SearchrSendEventArgs(IP, Port));
                }
            }

       

    Searcher2

    搜索到IP地址后可以双击ListBox或单确定按钮返回IP地址和端口,ListBox双击事件或确定按钮单击事件调用解析方法ParseIPPort(ListBox lstbox) ,返回IP地址和端口。

    三、调用扫描IP地址段和端口DLL

    随便新建个工程,然后引用SearcherIPPort工程,然后在窗体中引用SearcherIPPort命名空间

    //引用项目 SearcherIPPort
    using SearcherIPPort;
    using System.Net;
    using System.Text.RegularExpressions;

    调用方法也很简单

    private void btnScan_Click(object sender, EventArgs e)
    {
            frmSearcher frm = new frmSearcher();
            frm.SearcherSendEvent += new frmSearcher.SearchrSendDeletegate(frm_SearcherSendEvent);
            frm.ShowDialog();
    }

    在输入frm.SearcherSendEvent +=会有提示,然后按TAB键,会自动生成事件方法。

    void frm_SearcherSendEvent(object sender, SearchrSendEventArgs e)
    {
            txtIP.Text = e.IP;
            txtPort.Text = e.Port.ToString();
    }

    四、连接服务器,发送并接收信息

    加了一个TCP服务器,可以启动任意端口的TCP服务,默认端口是1234.为了便于测试,可以设置解决方法多项目启动,在 “解决方案”上右键菜单 “属性”,如下图:

    Searcher4

    在解决方案属性页,选中 “多启动项目” 除了IP地址端口扫描类库调置 “无”,另外两个设置为启动,这样就可同时启动两个解决方案了。

    Searcher5

    五、启动测试

    运行以后,先启动TCP服务,然后扫描设备,扫描到设备后可以直接双击显示列表,点击 “连接” 按钮,就可以发送文字了,这里使用的GB2312编码,可以发送汉字。

    Searcher3

    代码下载

  • 相关阅读:
    JQuery+Ajax+Ashx+Base64 data无法传递的问题
    用户 'IIS APPPOOL\DefaultAppPool' 登录失败。 的解决方案
    CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\4b49f661\23a749fc\App_Web_default.aspx.cdcab7d2.zii776dc.dl
    SQL 按月统计
    591  Box of Bricks
    10038 Jolly Jumpers
    113 Power of Cryptography
    10370 Above Average
    10189 Minesweeper
    136 Ugly Numbers 之“堆”的解法
  • 原文地址:https://www.cnblogs.com/wk986/p/2963456.html
Copyright © 2011-2022 走看看