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) {