1)InetAddress类的用法
2)URL类的用法
1.完成以下程序,写出主要代码,并画出程序的主要流程图。
第一题:域名与IP地址检索
在图形界面的文本框中输入主机名(域名),在下面的文本区中显示其IP地址信息;如果输入IP地址,则显示其主机名。
要求:
2. 完成以下程序,写出主要代码,并画出程序的主要流程图。
第二题:编写一个简易的浏览器程序
参考界面如下:
要求:
package shiyan2;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.swing.*;
/*
*
* 输入一个域名可以解析出对应的ip地址的信息
* JFrame窗口类
*ActionListener设置点击事件的
* */
public class Address_Resolution extends JFrame implements ActionListener{
JLabel labelOfAddress;//提示要输入的信息
JTextField textFldOfURLAddress;//接收输入的信息
JButton okBtn;//确定的按钮
JTextArea textFldOfResult;//显示结果
//构造方法
public Address_Resolution() {
this.setTitle("域名解析");
//lable设置
labelOfAddress = new JLabel("输入主机名或者IP地址:");
textFldOfURLAddress = new JTextField(20);
okBtn = new JButton("确定");
//设置事件监听器。将this传入,相当于setXxxListener
okBtn.addActionListener(this);
textFldOfURLAddress.addActionListener(this);
//设置第一行的显示的内容
JPanel jp1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
jp1.add(labelOfAddress);
jp1.add(textFldOfURLAddress);
jp1.add(okBtn);
//BorderLayout.NORTH表示沿水平方向排列。
this.add(jp1,BorderLayout.NORTH);
//显示结果的信息
textFldOfResult = new JTextArea();
//只显示不能编辑
textFldOfResult.setEditable(false);
this.add(textFldOfResult);
//设置为位置和宽度大小
this.setLocation(460,100);
this.setSize(600,400);
this.setVisible(true);
//关闭的操作
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//重写的事件监听的方法,用于设置按钮的点击事件,当按钮发生变化了就会
/*
* 点击确定按钮或者是回车都会触发查询的事件
* getSource()方法返回的是对象的本身,而不是对象的引用。
* */
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == okBtn || e.getSource() == textFldOfURLAddress) {
//获取用户输入的数据
String dnOrIp = textFldOfURLAddress.getText().trim();
try {
//不是数字的ip地址的时候,解析域名
if (!isIP(dnOrIp)) {
/*
* getAllByName,获取该hostname下的所有的ip的信息
*getHostAddress获取ip的信息
* */
InetAddress[] allByName = InetAddress.getAllByName(dnOrIp);
textFldOfResult.setText(dnOrIp + "的IP地址为:\n");
//读取所有的ip的信息
for (InetAddress net:allByName) {
textFldOfResult.append(net.getHostAddress() + "\n");
}
}
//解析ip,输出域名。貌似没有效果
else {
InetAddress address = InetAddress.getByName(dnOrIp);
textFldOfResult.setText(dnOrIp + "的域名为:\n");
textFldOfResult.append(address.getHostName());
}
}
catch (UnknownHostException e1) {
System.out.println("出错了:"+e1.getMessage()+"不正确");
textFldOfResult.setText("出错了:"+e1.getMessage()+"不正确");
}
catch (IOException x){
}
}else {
textFldOfResult.setText("您输入的数据不合法,请检查后重新数据!");
}
}
/*
*判断输入的是否是ip地址
* 简介:根据输入的.进行分割4组
*
* */
public static boolean isIP(String ip) {
//记录是不是4组
try{
int count = 0;
String[] temp = ip.split("\\.");
for (int i = 0; i < temp.length; i++) {
//isNumeric判断是不是数字的
if(isNumeric(temp[i]) && 0
效果图:
参考代码
/*
* 输入网络地址显示内容
* */
public class InternetAndURL extends JFrame implements ActionListener,Runnable, HyperlinkListener {
JEditorPane editPane;//网络资源文本区
JScrollPane jScrollPane;
JTextField textFldOfURLAddress;//显示网络地址的文本框
JLabel lableOfAddress;
JButton okBtn;
URL url;
Thread threadURL;
byte[] b = new byte[118];
public InternetAndURL() {
lableOfAddress = new JLabel("请输入网址:");
textFldOfURLAddress = new JTextField(40);
okBtn = new JButton("确定");
okBtn.addActionListener(this);
textFldOfURLAddress.addActionListener(this);
JPanel jp1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
jp1.add(lableOfAddress);
jp1.add(textFldOfURLAddress);
jp1.add(okBtn);
this.add(jp1,BorderLayout.NORTH);
editPane = new JEditorPane();
editPane.setSize(12,12);
editPane.setEditable(false);
editPane.addHyperlinkListener(this);
jScrollPane = new JScrollPane(editPane);
this.add(jScrollPane);
this.setLocation(300,200);
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
threadURL = new Thread(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==okBtn || e.getSource()==textFldOfURLAddress) {
if (!threadURL.isAlive()) {
threadURL = new Thread(this);
threadURL.start();
}
}
}
@Override
public void run() {
try {
String[] Cyuming = {"www.sdu.edu.cn","www.baidu.com","www.sohu.com","www.taobao.com","www.bilibili.com"};
String[] Eyuming = {"山东大学","百度","搜狐","淘宝","B站"};
String str = textFldOfURLAddress.getText().trim();
//中英文域名转换
for (int i = 0; i < 5; i++) {
if (Eyuming[i].equals(str)) {
str = Cyuming[i];
}
}
//加协议
if (!str.startsWith("http://")){
str = "http://" + str;
}
url = new URL(str);
editPane.setPage(url);
textFldOfURLAddress.setText(url.toString());
} catch (MalformedURLException e) {
} catch (IOException e) {
}
}
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType()==HyperlinkEvent.EventType.ACTIVATED) {
try {
URL url1 = e.getURL();
editPane.setPage(url1);
textFldOfURLAddress.setText(url1.toString());
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
InternetAndURL nw = new InternetAndURL();
nw.setVisible(true);
}
}