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

 

代码下载

posted @ 2013-03-16 16:00  wk986  阅读(1123)  评论(0编辑  收藏  举报