实验名称:IP地址转换和域名解析
实验目的:1、通过本实验,复习本教材各章例子里的WPF前端主界面和子页面的实现。
2、通过本实验,熟悉和掌握IPAddress类、IPEndPoint类、IPHostEntry类、DNS类的使用。
实验内容:
实验的重点、难点:IPAddress类、IPEndPoint类、IPHostEntry类、DNS类的使用。
实验环境:Visual stdio 2017以上
XML
<Grid Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="2" Fill="white"
RadiusX="14" RadiusY="14" Stroke="Blue" StrokeDashArray="3"/>
<Rectangle Grid.Column="0" Margin="7" Fill="#FFF0F9D8"
RadiusX="10" RadiusY="10" Stroke="Blue" StrokeDashArray="3"/>
<Rectangle Grid.Column="0" Margin="20" Fill="white" Stroke="Blue"/>
<ScrollViewer Grid.Column="0" Margin="22">
<StackPanel>
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="Margin" Value="5 10 5 0"/>
<Setter Property="Padding" Value="15 0 15 0"/>
<Setter Property="FontSize" Value="10"/>
<EventSetter Event="Click" Handler="button_Click"/>
</Style>
</StackPanel.Resources>
<Button Content="例1" Tag="/Examples/Page1.xaml"/>
<Button Content="例2" Tag="/Examples/Page2.xaml"/>
<Button Content="例3" Tag="/Examples/Page3.xaml"/>
</StackPanel>
</ScrollViewer>
<Frame Name="frame1" Grid.Column="1" Margin="10" BorderThickness="1"
BorderBrush="Blue" NavigationUIVisibility="Hidden"/>
</Grid>
private void button_Click(object sendar,RoutedEventArgs e)
{
Button btn = e.Source as Button;
btn.Foreground = Brushes.Red;
oldButten.Foreground = Brushes.Black;
oldButten = btn;
frame1.Source = new Uri(btn.Tag.ToString(), UriKind.Relative);
}
private void button_Click(object sendar,RoutedEventArgs e)
{
Button btn = e.Source as Button;
btn.Foreground = Brushes.Red;
oldButten.Foreground = Brushes.Black;
oldButten = btn;
frame1.Source = new Uri(btn.Tag.ToString(), UriKind.Relative);
}
<DockPanel>
<Label DockPanel.Dock="Top" Content="DNS域名解析和IP地址转换的基本用法"
Style="{StaticResource LabelStyle}"/>
<Border DockPanel.Dock="Bottom" Style="{StaticResource BorderStyle}">
<Button Name="btn" HorizontalAlignment="Center"
Padding="10 0 10 0" Content="运行" Click="btn_Click"/>
</Border>
<ScrollViewer>
<StackPanel Background="White" TextBlock.LineHeight="20">
<TextBlock x:Name="textBlock1" Margin="0 10 0 0" TextWrapping="Wrap"/>
</StackPanel>
</ScrollViewer>
</DockPanel>
private void btn_Click(object sender, RoutedEventArgs e)
{
StringBuilder sb= new StringBuilder();
sb.AppendLine("获取www.cctv.com的所有IP地址");
try
{
IPAddress[] ips = Dns.GetHostAddresses("www.cctv.com");//返回指定主机的Internet协议IP地址
foreach (IPAddress ip in ips) {
sb.AppendLine(ip.ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,"获取失败");
}
string hostName=Dns.GetHostName();//获取本地计算机的主机名
sb.AppendLine("获取本机所有IP地址");
IPHostEntry me=Dns.GetHostEntry(hostName);//将主机名或IP地址解析为IPHostEntry实例
foreach(IPAddress ip in me.AddressList) {
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
sb.AppendLine("IPv4:"+ip.ToString());
}
else if(ip.AddressFamily==AddressFamily.InterNetworkV6){
sb.AppendLine("IPv6:" + ip.ToString());
}
else
{
sb.AppendLine("其他" + ip.ToString());
}
}
IPAddress localip = IPAddress.Parse("::1");
Output(sb,localip);
IPAddress localip1=IPAddress.Parse("127.0.0.1");
Output(sb,localip1);
textBlock1.Text= sb.ToString();
}
private static void Output(StringBuilder sb, IPAddress localip)
{
IPEndPoint iep = new IPEndPoint(localip, 80);
if (localip.AddressFamily == AddressFamily.InterNetworkV6)
{
sb.Append("IPv6端点:" + iep.ToString());
}
else
{
sb.Append("IPv4端点:" + iep.ToString());
}
sb.Append(",端口"+iep.Port);
sb.Append(",地址" + iep.Address);
sb.AppendLine(",地址族"+iep.AddressFamily);
}