Как пропустить последующий байт [], полученный из сокета, используя c # - PullRequest
0 голосов
/ 24 июня 2009

Я использую функцию ниже в потоке, чтобы получить байт [] через разъем. Поскольку у моей машины есть два сетевых адаптера, она получает байт [] два раза. Я хочу пропустить следующий полученный байт [].

Что я должен сделать, чтобы достичь этого?

public void Receiver()
{

        strMultpileBatchString = "";
        string mcastGroup = ReceiverIP;
        string port = ReceiverPort;

        //Declare the socket object.
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        //Initialize the end point of the receiver socket.
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port));
        s.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.NoDelay, 1);
        s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
        s.Bind(ipep);
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 0);
        IPAddress ip = IPAddress.Parse(mcastGroup);
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip));


        while (true)
        {
            byte[] b = new byte[BytesSize];
        }
}

1 Ответ

3 голосов
/ 24 июня 2009
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port));        

Я думаю, что это является причиной проблемы IPAddress.Any, попробуйте указать конкретный IP (одна из двух сетевых карт)

С MSDN

"Перед вызовом Bind необходимо сначала создать локальный IPEndPoint, с которого вы собираетесь передавать данные. Если вам все равно, какой локальный адрес назначен, вы можете создать IPEndPoint, используя IPAddress .. ::. Any в качестве адреса параметр, и основной поставщик услуг назначит наиболее подходящий сетевой адрес. Это может помочь упростить ваше приложение, если у вас несколько сетевых интерфейсов "

...