嘿那里,我正在尝试使用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;
}
答案 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