Pergunta

Tentando pacotes unicast para redes disponíveis. Existem no total 3 redes. Conseguiu obter pacotes em apenas um network.But eu não sou capaz de receber os pacotes em diferentes redes.

usando este código ..

        foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
        {
            foreach (var ua in i.GetIPProperties().UnicastAddresses)
            {
                System.Windows.Forms.MessageBox.Show(ua.Address.ToString());
                IPAddress Tip = IPAddress.Parse(ua.Address.ToString());
                IPEndPoint targetEndPoint = new IPEndPoint(Tip, iTargetPort);
                MyUdpClient sendUdpClient = new MyUdpClient();
                int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);
            }
        }

O que é prob? Obrigado.

Foi útil?

Solução

Eu acho que você está tentando enviar pacotes para si mesmo?

Tem certeza de que não estamos confundindo endereços unicast e multicast?

Ok, então você não está tentando multicast ...

Cada um de sua interface de rede tem um endereço IP. O que você está fazendo aqui é o envio de um pacote para sua placa de rede. Não é realmente uma questão de rede porque a sua máquina provavelmente conhece seus próprios endereços IP e redirecionar para 127.0.0.1

Outras dicas

Uma vez que você tenha mais de uma interface que você está com diversas bases. Para cada interface, você terá uma IPaddress. Assim, com três interfaces você terá três de IP locais. Quando você usa o UdpClient você precisa especificar qual interface para enviar usando-o de IP.

vamos supor que você tenha o seguinte

três de IP local

10.1.0.1
10.2.0.1
10.4.0.1
com uma máscara de rede 255.255.0.0

e você quer enviar um pacote UDP para 10.2.5.5 você precisa enviá-lo 10.2.0.1 então use o seguinte código

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.2.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.2.5.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

e enviar um pacote UDP para 10.1.90.5 você precisa enviá-lo 10.1.0.1 então use o seguinte código

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.1.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.1.90.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

A diferença entre os dois são a LocalEndPoint eo targetEndPoint.

Eu não sou muito de um guru de rede, mas vou tentar dar uma facada nele. Presumo que todos os pacotes são enviados através da interface padrão que sabe de três endereços: é próprio, auto-retorno, e gateway. Portanto um pacote de 192.168.1.111 destinado para 10.10.1.117 precisaria passar pelo gateway padrão (vamos apenas dizer que este é 192.168.1.1), mas não o que se 192.168.1.1 não sei o caminho para 10.10.0.0, então host de destino direito inacessível? Eu não sei, isso é o meu palpite.

Embora, talvez eu esteja errado. Talvez ele não usa um dispositivo padrão e em vez disso usa todas as interfaces disponíveis, juntamente com a pilha TCP / IP. De qualquer forma, estou curioso para ver o que você encontrar no entanto. Por favor, nos manter atualizados.

Além disso, anotando os endereços pode ser útil. rota do traço é seu amigo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top