C# IP地址段端口扫描器封装调用
上一篇IP地址段端口扫描器是独立使用的,为了方便以后的程序调用,把它封装成DLL。首先新建名为“SearcherIPPort ”的类库,为了规范,把窗体都重新命名,然后增加到新的工程中,注意一定不要忘记把命名空间也改了,窗体“frmSet.cs”(指定IP地址段和端口)是通过事件传值把要搜索的IP地址段和端口传给“frmSearcher.cs”(搜索窗体)。搜索到IP地址和端口后还要把值传给调用的窗体。代码下载
一、在SearcherIPPort工程新增加一个类,名为SearchrSendEventArgs,继承EventArgs
生成属性,输入 pro ,把光标移动到propfull(显示的这几个都可以试试)。然后按TAB键会自动生成属性代码,然后再次按TAB键会在可以更改的值里移动,最后改完了按回车完成,如下图
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;
/// <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)); } }
搜索到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.为了便于测试,可以设置解决方法多项目启动,在 “解决方案”上右键菜单 “属性”,如下图:
在解决方案属性页,选中 “多启动项目” 除了IP地址端口扫描类库调置 “无”,另外两个设置为启动,这样就可同时启动两个解决方案了。
五、启动测试
运行以后,先启动TCP服务,然后扫描设备,扫描到设备后可以直接双击显示列表,点击 “连接” 按钮,就可以发送文字了,这里使用的GB2312编码,可以发送汉字。