Gostaria de simular um servidor TCP, usando Hercules (da HW-Group).
Quando configuro a porta (12714), netstat -aon | findstr "12714"
me mostra esse resultado:
DOS Prompt>netstat -aon | findstr "12714"
TCP 0.0.0.0:12714 0.0.0.0:0 LISTENING 29408
Alguém sabe como posso obter o endereço do servidor TCP "127.0.0.1:12714" em vez de "0.0.0.0:12714" (ou qualquer outro endereço IP, só quero me livrar desse endereço de transmissão)?
A razão pela qual pergunto: a bind()
é feito para esse endereço/porta IP, com a seguinte exceção como resultado:
Communication.TcpConnection.Connect | TcpConnection: Connecting failed (127.0.0.1:12714):
System.Net.Sockets.SocketException (0x80004005): The requested address is not valid in its context
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at Server.Communication.TcpConnection.Connect() in
C:\...Communication\TcpConnection.cs:line 60
desde já, obrigado
Neste contexto, não é um endereço de broadcast – é o endereço curinga "todos os endereços locais".
Cabe ao programa ouvinte especificar qual endereço local deseja
bind()
. Se não especificar nenhum, o soquete estará vinculado a todos os endereços pertencentes à máquina. Contate os desenvolvedores do programa para adicionar tal opção – ou use algo como ForceBindIP para injetar a chamada bind() correta.Qualquer soquete vinculado ao endereço curinga inclui automaticamente o endereço de loopback, portanto, se o seu programa não tiver a opção de alterar o que ele está vinculado e se o seu objetivo for restringir o servidor, o método mais fácil de torná-lo "local apenas "é mantê-lo vinculado a 0.0.0.0 e usar o Firewall do Windows (
wf.msc
) para bloquear quaisquer conexões de entrada indesejadas.