Visual Studio 2008 Vista soquete Problem
-
06-07-2019 - |
Pergunta
Olá, eu estou tentando usar um programa de porta verificação escrito em Visual Studio 2008 usando o 3.5 SP 1 .Net Framework, e eu parecem ter um problema com o meu programa no Vista com base (neste caso, o sistema operacional real do OS é Windows 2008 Server (ambos 32 e 64 máquinas bit)), enquanto ele faz no entanto funcionam bem em máquinas XP. Eu não sou inteiramente certo qual é o problema, mas eu recebo um System.NotSupportedException. Alguma idéia de como eu posso mudar o código a seguir (ou de preferência a configuração da máquina) para permitir este tipo de verificação de porta?
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;
}
Solução
Acontece que o problema era:
Dns.GetHostAddresses ( "localhost");
Retorna 2 Endereços IP no Windows 2008 Server. O primeiro é ":: 1" e o segundo é o IP real. Se alguém sabe por que isso é (uma vez que eu não posso fazer sentido do retorno ":: 1") que eu aprecio isso, caso contrário, apenas pegar o último IP da lista parece funcionar.
Outras dicas
:: 1 é o endereço IPv6 loopback. Seu código falha porque você usa AddressFamily.InterNetwork vez de AddressFamily.InternetWorkV6.
Vista + tem IPv6 em execução por padrão. É uma opção de configuração separado para XP / 2003.
Creio que existem dois endereços IP devolvidos no Windows 2008 Server porque um é IPv4 eo outro é o endereço IPv6.
"Quando uma cadeia vazia é passado como o nome do host, esse método retorna os endereços IPv4 do host local para todos os sistemas operacionais, exceto o Windows Server 2003; para o Windows Server 2003, ambos os endereços IPv4 e IPv6 para o host local são devolvidos ". Src: http://msdn.microsoft.com/ en-us / library / system.net.dns.gethostaddresses.aspx