Ejemplo n.º 1
0
        public void Send(byte[] buffer, int length)
        {
            // make sure that a default destination IPEndpoint has been configured.
            if ((destinationIpAddress == IPv6Any) || (destinationPort == IPPortAny))
            {
                throw new SocketsException("Socket is not connected.");
            }

            UdpDatagram udpDatagram = new UdpDatagram();

            udpDatagram.DestinationPort = destinationPort;
            udpDatagram.SourcePort      = sourcePort;
            udpDatagram.AddPayload(buffer);
            udpDatagram.Checksum = 0;


            IPv6Packet packetUDP = new IPv6Packet();

            packetUDP.SourceAddress      = sourceIpAddress;
            packetUDP.DestinationAddress = destinationIpAddress;
            packetUDP.NextHeader         = IPv6Protocol.Udp;
            packetUDP.Payload            = udpDatagram;
            packetUDP.PayloadLength      = udpDatagram.Length;


            IPv6PseudoHeader ipv6PseudoHeader = new IPv6PseudoHeader(packetUDP.SourceAddress, packetUDP.DestinationAddress, packetUDP.PayloadLength, (byte)packetUDP.NextHeader);
            ushort           checkSum         = ipv6PseudoHeader.GetCheckSum();

            checkSum = NetUtilities.ComputeChecksum(checkSum, udpDatagram.ToBytes(), true);

            udpDatagram.Checksum = checkSum;

            NetworkingInterface.Send(packetUDP.ToBytes());
        }