Visual Studio 2008 Vista套接字问题

时间:2009-09-11 19:43:13

标签: visual-studio-2008 sockets windows-server-2008

嘿那里,我正在尝试使用3.5 SP 1 .Net Framework在Visual Studio 2008中编写的端口检查程序,我似乎在基于Vista的操作系统上使用我的程序时出现问题(在这种情况下是实际操作系统)是Windows 2008 Server(32位和64位计算机))但它在XP机器上运行良好。我不完全确定问题是什么,但我得到一个System.NotSupportedException。有关如何更改以下代码(或最好是机器配置)以允许此类端口检查的任何想法?

    static bool IsPortOpen(int portNumber)
    {
        bool isOpen = false;
        IPAddress ip = (IPAddress)Dns.GetHostAddresses("localhost")[0];
        Socket s = null;

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

            s.Connect(ip, portNumber);

            // Port is in use and connection is successful
            if (s.Connected == true)
            {
                isOpen = false;
            }
        }
        catch (SocketException exception)
        {
            // http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx
            if (exception.ErrorCode == 10061)
            {
                isOpen = true;
            }
        }
        finally
        {
            if (s != null)
            {
                s.Close();
            }
        }

        return isOpen;
    }

3 个答案:

答案 0 :(得分:0)

原来问题是:

Dns.GetHostAddresses( “本地主机”);

在Windows 2008 Server上返回2个IP地址。第一个是“:: 1”,第二个是实际的IP。如果有人知道为什么会这样(因为我无法理解“:: 1”返回)我会很感激,否则,只要抓住列表的最后一个IP就行了。

答案 1 :(得分:0)

:: 1是IPv6环回地址。您的代码失败,因为您使用AddressFamily.InterNetwork而不是AddressFamily.InternetWorkV6。

Vista +默认运行IPv6。它是XP / 2003的独立配置选项。

答案 2 :(得分:0)

我相信在Windows 2008 Server上有两个IP地址,因为一个是IPv4,另一个是IPv6地址。

“当空字符串作为主机名传递时,此方法返回除Windows Server 2003以外的所有操作系统的本地主机的IPv4地址;对于Windows Server 2003,返回本地主机的IPv4和IPv6地址“。 Src:http://msdn.microsoft.com/en-us/library/system.net.dns.gethostaddresses.aspx