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

 

代码下载

你可能感兴趣的:(IP地址)