CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 450

450
Chương 11: Lập trình mạng

cksum_buffer[i] = BitConverter.ToUInt16(icmp_pkt_buffer,

icmp_header_buffer_index);

icmp_header_buffer_index += 2;

}

UInt16 u_cksum = checksum(cksum_buffer, cksum_buffer_length);

packet.CheckSum = u_cksum;

// Tuần tự hóa packet.

byte[] sendbuf = new byte[PacketSize];

index = Serialize(packet, sendbuf, PacketSize, PingData);

// Bắt đầu tính giờ.

dwStart = System.Environment.TickCount;

socket.SendTo(sendbuf, PacketSize, 0, epServer);

// Nhận đáp ứng, và ngừng tính giờ.

byte[] ReceiveBuffer = new byte[256];

socket.ReceiveFrom(ReceiveBuffer, 256, 0, ref EndPointFrom);

dwStop = System.Environment.TickCount - dwStart;

}

// Dọn dẹp và trả về thời gian "ping" (tính theo giây).

socket.Close();

return (int)dwStop;

}

private static int Serialize(IcmpPacket packet, byte[] buffer,

int packetSize, int pingData) {

// (Bỏ qua phương thức private dùng để tuần tự hóa packet.)

}

private static UInt16 checksum(UInt16[] buffer, int size) {