C#扫描计算机端口
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace PortScanner
{
class Program
{
//已扫描端口数目
internal static int scannedCount = 0;
//正在运行的线程数目
internal static int runningThreadCount = 0;
//打开的端口数目
internal static List<int> openedPorts = new List<int>();
//起始扫描端口
static int startPort = 1;
//结束端口号
static int endPort = 500;
//最大工作线程数
static int maxThread = 10;
static void Main(string[] args)
{
//接收传入参数一作为要扫描的主机
string host = "192.168.0.1";
//接收传入参数二作为端口扫描范围,如1-4000
string portRange = "1-400";
startPort = int.Parse(portRange.Split('-')[0].Trim());
endPort = int.Parse(portRange.Split('-')[1].Trim());
for (int port = startPort; port < endPort; port++)
{
//创建扫描类
Scanner scanner = new Scanner(host, port);
Thread thread = new Thread(new ThreadStart(scanner.Scan));
thread.Name = port.ToString();
thread.IsBackground = true;
//启动扫描线程
thread.Start();
runningThreadCount++;
Thread.Sleep(10);
//循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术
while (runningThreadCount >= maxThread) ;
}
//空循环,直到所有端口扫描完毕
while (scannedCount + 1 < (endPort - startPort)) ;
Console.WriteLine();
Console.WriteLine();
//输出结果
Console.WriteLine("Scan for host: {0} has been completed , \n total {1} ports scanned, \nopened ports :{2}",
host, (endPort - startPort), openedPorts.Count);
foreach (int port in openedPorts)
Console.WriteLine("\tPort: {0} is open", port.ToString().PadLeft(6));
}
}
//扫描类
class Scanner
{
string m_host;
int m_port;
public Scanner(string host, int port)
{
m_h
相关文档:
/// <summary>
/// 支持XML序列化的泛型 Dictionary
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
[XmlRoot("SerializableDictionary")]
public class SerializableDictionary<TKey, TValue& ......
c#中写一个多线程应用是非常简单的,本章将介绍如何在c#种开发多线程程序。在.net中线程是由System.Threading 名字空间所定义的。所以你必须包含这个名字空间。
using System.Threading;
开始一个线程
System.Threading 名字空间的线程类描述了一个线程对象,通过使用类对象,你可以创建、删除、停止及恢复一个线程。 ......
我以为,在所有模式中,最简单、最常用的就是工厂模式了(包括抽象工厂)。
工厂模式和抽象模式的区别在于,工厂模式是通过参数(一般叫型别码)来动态生成对象,而抽象工厂必须了解上下文才能调用相应的对象。实例代码如下:
一、工厂模式
public class Factory
{
public static object Create(int type)
{
......
通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务。这样是使工作简单了,但是却和提供Web服务的URL、方法名、参数绑定在一起了,这是VS.NET自动为我们生成Web服务代理的限制。如果哪一天发布Web服务的URL改变了,则我们需要重新让VS.NE ......