Visual Studio 2013 C#使用/main编译

Visual Studio 2013 C#使用/main编译,c#,visual-studio-2013,C#,Visual Studio 2013,我是编程新手,我正在尝试为端口扫描器编写代码。当我单击Build(构建)时,我会收到以下错误消息…我意识到这是同一个错误,只是在两个不同的位置,但我想如果同时列出这两个错误,可能会有伤害: 错误1程序“c:\Users\pat_000\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\obj\Debug\WpfApplication2.exe”定义了多个入口点:“PortScanner.Program.Ma

我是编程新手,我正在尝试为端口扫描器编写代码。当我单击Build(构建)时,我会收到以下错误消息…我意识到这是同一个错误,只是在两个不同的位置,但我想如果同时列出这两个错误,可能会有伤害:

错误1程序“c:\Users\pat_000\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\obj\Debug\WpfApplication2.exe”定义了多个入口点:“PortScanner.Program.Main(string[])”。使用/main编译以指定包含入口点的类型

错误2程序“c:\Users\pat_000\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\obj\Debug\WpfApplication2.exe”定义了多个入口点:“WpfApplication2.App.Main()”。使用/main编译以指定包含入口点的类型

这是我的密码:

enter code here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
using System.Net.Sockets;
using System.Net;

namespace PortScanner
{
    class Program
    {
        static bool stop = false;
        static int startPort;
        static int endPort;

        static List<int> openPorts = new List<int>();

        static object consoleLock = new object();

        static int waitingForResponses;

        static int maxQueriesAtOneTime = 100;

        static void Main(string[] args)
        {
        begin:
            Console.WriteLine("Enter the IP Address of the target:");
            string ip = Console.ReadLine();

            IPAddress ipAddress;

            if (!IPAddress.TryParse(ip, out ipAddress))
                goto begin;

        startP:

            Console.WriteLine("Enter the starting port to start scanning on:");
            string sp = Console.ReadLine();

            if (!int.TryParse(sp, out startPort))
                goto startP;

        endP:

            Console.WriteLine("Enter the end port:");
            string ep = Console.ReadLine();

            if (!int.TryParse(ep, out endPort))
                goto endP;

            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("");

            Console.WriteLine("Press any key to stop scanning...");

            Console.WriteLine("");
            Console.WriteLine("");

            ThreadPool.QueueUserWorkItem(StartScan, ipAddress);

            Console.ReadKey();

            stop = true;

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }

        static void StartScan(object o)
        {
            IPAddress ipAddress = o as IPAddress;

            for (int i = startPort; i < endPort; i++)
            {
                lock (consoleLock)
                {
                    int top = Console.CursorTop;

                    Console.CursorTop = 7;
                    Console.WriteLine("Scanning port: {0}    ", i);

                    Console.CursorTop = top;
                }

                while (waitingForResponses >= maxQueriesAtOneTime)
                    Thread.Sleep(0);

                if (stop)
                    break;

                try
                {
                    Socket s = new Socket(AddressFamily.InterNetwork,     SocketType.Stream, ProtocolType.Tcp);

                    s.BeginConnect(new IPEndPoint(ipAddress, i), EndConnect,  s);

                    Interlocked.Increment(ref waitingForResponses);
                }
                catch (Exception)
                {

                }
            }
        }

        static void EndConnect(IAsyncResult ar)
        {
            try
            {
                DecrementResponses();

                Socket s = ar.AsyncState as Socket;

                s.EndConnect(ar);

                if (s.Connected)
               {
                    int openPort =      Convert.ToInt32(s.RemoteEndPoint.ToString().Split(':')[1]);

                    openPorts.Add(openPort);

                    lock (consoleLock)
                    {
                        Console.WriteLine("Connected TCP on port: {0}", openPort);
                    }

                    s.Disconnect(true);
                }
            }
            catch (Exception)
            {

            }
        }

        static void IncrementResponses()
        {
            Interlocked.Increment(ref waitingForResponses);

            PrintWaitingForResponses();
        }

        static void DecrementResponses()
        {
            Interlocked.Decrement(ref waitingForResponses);

            PrintWaitingForResponses();
        }

        static void PrintWaitingForResponses()
        {
            lock (consoleLock)
            {
                int top = Console.CursorTop;

                Console.CursorTop = 8;
                Console.WriteLine("Waiting for responses from {0} sockets       ", waitingForResponses);

                Console.CursorTop = top;
            }
        }
    }
}
namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
         public MainWindow()
        {
            InitializeComponent();
        }
    }
}
在此处输入代码
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
使用系统线程;
使用System.Net.Sockets;
Net系统;
命名空间端口扫描程序
{
班级计划
{
静态布尔停止=假;
静态int起始端口;
静态内部端口;
静态列表openPorts=新列表();
静态对象控制台锁定=新对象();
静态int等待响应;
静态int maxQueriesAtOneTime=100;
静态void Main(字符串[]参数)
{
开始:
Console.WriteLine(“输入目标的IP地址:”);
字符串ip=Console.ReadLine();
IPAddress-IPAddress;
if(!IPAddress.TryParse(ip,out-IPAddress))
去开始;
startP:
Console.WriteLine(“输入开始扫描的起始端口:”);
字符串sp=Console.ReadLine();
如果(!int.TryParse(sp,out startPort))
后藤星;
(完)
Console.WriteLine(“输入结束端口:”);
字符串ep=Console.ReadLine();
如果(!int.TryParse(ep,输出端端口))
goto endP;
控制台。写线(“”);
控制台。写线(“”);
控制台。写线(“”);
控制台。写线(“”);
Console.WriteLine(“按任意键停止扫描…”);
控制台。写线(“”);
控制台。写线(“”);
QueueUserWorkItem(StartScan,ipAddress);
Console.ReadKey();
停止=真;
Console.WriteLine(“按任意键退出…”);
Console.ReadKey();
}
静态无效开始扫描(对象o)
{
IPAddress IPAddress=o作为IPAddress;
对于(int i=startPort;i=maxQueriesAtOneTime)
睡眠(0);
如果(停止)
打破
尝试
{
Socket s=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp);
s、 BeginConnect(新的IPEndPoint(ipAddress,i),EndConnect,s);
联锁。增量(参考等待响应);
}
捕获(例外)
{
}
}
}
静态无效端点连接(IAsyncResult ar)
{
尝试
{
递减响应();
套接字s=ar.AsyncState作为套接字;
s、 端接(ar);
如果(已连接)
{
int openPort=Convert.ToInt32(s.RemoteEndPoint.ToString().Split(“:”)[1]);
添加(openPort);
锁(控制台锁)
{
WriteLine(“端口上连接的TCP:{0}”,openPort);
}
s、 断开连接(正确);
}
}
捕获(例外)
{
}
}
静态void IncrementResponses()
{
联锁。增量(参考等待响应);
PrintWaitingForResponses();
}
静态空隙递减响应()
{
联锁。减量(参考等待响应);
PrintWaitingForResponses();
}
静态void printing waitingforresponses()
{
锁(控制台锁)
{
int top=Console.CursorTop;
Console.CursorTop=8;
WriteLine(“等待来自{0}套接字的响应”,waitingForResponses);
Console.CursorTop=顶部;
}
}
}
}
命名空间WpfApplication2
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
}
}

您显然想编写一个控制台应用程序。你选择了WPF应用程序。复制整个代码,基于ConsoleApplication创建新项目,并将代码粘贴到其中


并试着摆脱gotos;这不是基本的。您可以轻松地为所有三种用途创建一个函数。

尝试查看其他解决方案文件,看看是否在其他地方定义了另一个Main(),这会让编译器感到困惑。