Estou trabalhando em dois aplicativos (um servidor e um cliente), ambos se comunicando pela porta TCP 7447.
O aplicativo do servidor já está em execução e conectado na porta mencionada:
Prompt>netstat -aon | findstr "7447"
UDP 0.0.0.0:7447 *:* 41316
Prompt>tasklist /FI "PID eq 41316"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
MyServer.exe 41316 Console 1 71.308 K
No aplicativo cliente, estou tentando receber informações do aplicativo servidor, da seguinte forma:
private void Receive()
{
BaseTelegram telegram = null;
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, this._listenPort);
try
{
Byte[] receivedBytes = this._udpClient.Receive(ref endpoint);
O mencionado _udpClient
possui as seguintes propriedades:
Também sei que passou por este código-fonte:
public UdpConnection(System.Net.Sockets.UdpClient udpClient, Int32 listenPort)
{
this._listenPort = listenPort;
this._udpClient = udpClient;
}
Eu sei que o aplicativo cliente está sendo executado no site do cliente, mas no meu PC, recebo a seguinte exceção:
System.InvalidOperationException: 'You must call the Bind method before performing this operation.'
Não estou interessado em como devo adaptar o código-fonte para fazê-lo funcionar (como o código está funcionando nas instalações do cliente, ele também deve funcionar no meu PC), gostaria de saber qual configuração preciso alterar para fazer esse código funcionar.
Alguém tem alguma ideia?
Obrigado
Se você não especificar um parâmetro de porta ao construir um
UdpClient
, então o cliente não será vinculado a uma porta local, e você não poderá chamar oReceive
método. Por exemplo:Este comportamento é mencionado no documento :
A solução direta é especificar um parâmetro de porta ao construir o
UdpClient
(0 também é possível):Outra solução implícita é chamar o
Send
método antes de chamáReceive
-lo, porque o provedor de serviços subjacente atribuirá o endereço de rede local e o número de porta mais apropriados .