java网络编程第8章举的Whois客户端例子的代码

来源:互联网 发布:淘宝卖家可以买东西吗 编辑:程序博客网 时间:2024/05/22 13:34

Whois类

连接服务器

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.Writer;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;import java.net.UnknownHostException;import org.omg.CORBA.portable.UnknownException;public class Whois {public final static int DEFAULT_PORT=43;//端口  成员变量public final static String DEFAULT_HOST="whois.internic.net";//地址private int port=DEFAULT_PORT;private InetAddress host;public Whois(InetAddress host,int port){this.host=host;this.port=port;}public Whois(InetAddress host){this(host,DEFAULT_PORT);//构造方法引用}public Whois(String hostname,int port)throws UnknownHostException{this(InetAddress.getByName(hostname),port);}public Whois(String hostname)throws UnknownHostException{this(InetAddress.getByName(hostname),DEFAULT_PORT);}public Whois() throws UnknownHostException{this(DEFAULT_HOST,DEFAULT_PORT);}public enum SearchFor{ANY("Any"),NETWORK("Network"),PERSON("Person"),HOST("Host"),DOMAIN("Domain"),ORGANIZATION("Organization"),GROUP("Group"),GATEWAY("Gateway"),ASN("Asn");private String label;private SearchFor(String label){this.label=label;}}public enum SearchIn{ALL(""),NAME("Name"),MAILBOX("Mailbox"),HANDLE("!");private String label;private SearchIn(String label){this.label=label;}}public String lookUpNames(String target,SearchFor category,SearchIn group,boolean exactMatch)throws IOException{String  suffix="";if(!exactMatch)suffix=".";String prefix=category.label+""+group.label;String query=prefix+target+suffix;Socket socket=new Socket();try{SocketAddress address=new InetSocketAddress(host,port);socket.connect(address);//连接服务器Writer out=new OutputStreamWriter(socket.getOutputStream(),"ASCII");//向服务器写数据BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(),"ASCII"));//从服务器读数据out.write(query+"\r\n");out.flush();StringBuilder response=new StringBuilder();String theLine=null;while((theLine=in.readLine())!=null){response.append(theLine);response.append("\r\n");}return response.toString();}finally{socket.close();}}public InetAddress getHost(){return this.host;}public void setHost(String host)throws UnknownHostException{this.host=InetAddress.getByName(host);}}
Whois客户端代码

import java.awt.BorderLayout;import java.awt.Component;import java.awt.Container;import java.awt.EventQueue;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Frame;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.net.UnknownHostException;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingWorker;import javax.swing.WindowConstants;public class WhoisGUI extends JFrame{private JTextField searchString=new JTextField(30);  //编辑文本,单行private JTextArea names=new JTextArea(15,80);  //编辑文本,多行private JButton findButton=new JButton("Find");private ButtonGroup searchIn=new ButtonGroup();//多斥按钮private ButtonGroup searchFor=new ButtonGroup();private JCheckBox exactMatch=new JCheckBox("Exact Match",true);//复选框private JTextField chosenServer=new JTextField();private Whois server;public WhoisGUI(Whois whois){super("Whois");this.server=whois;Container pane=this.getContentPane();//初始化一个容器Font f=new Font("Monospaced",Font.PLAIN,12);names.setFont(f);names.setEditable(false);//不可编辑JPanel centerPanel=new JPanel();centerPanel.setLayout(new GridLayout(1,1,10,10));//布局,网格布局JScrollPane jsp=new JScrollPane(names);//滚动条centerPanel.add(jsp);pane.add("Center",centerPanel);JPanel northPanel=new JPanel();JPanel northPanelTop=new JPanel();northPanelTop.setLayout(new FlowLayout(FlowLayout.LEFT));//布局,流式布局northPanelTop.add(new JLabel("Whois:"));northPanelTop.add("North",searchString);northPanelTop.add(exactMatch);northPanelTop.add(findButton);northPanel.setLayout(new BorderLayout(2,1));northPanel.add("North",northPanelTop);JPanel northPanelBottom=new JPanel();northPanelBottom.setLayout(new GridLayout(1,3,5,5));northPanelBottom.add(initRecordType());northPanelBottom.add(initSearchFields());northPanelBottom.add(initServerChoice());northPanel.add("Center",northPanelBottom); pane.add("North",northPanel);  ActionListener al=new LookupNames(); findButton.addActionListener(al); searchString.addActionListener(al);} private JPanel initRecordType(){ JPanel p=new JPanel(); p.setLayout(new GridLayout(6,2,5,2)); p.add(new JLabel("Search for:")); p.add(new JLabel("")); JRadioButton any=new JRadioButton("Any",true); any.setActionCommand("Any"); searchFor.add(any);         p.add(any);         p.add(this.makeRadioButton("Network"));         p.add(this.makeRadioButton("Person"));         p.add(this.makeRadioButton("Host"));         p.add(this.makeRadioButton("Domain"));         p.add(this.makeRadioButton("Organization"));         p.add(this.makeRadioButton("Group"));         p.add(this.makeRadioButton("Gateway"));         p.add(this.makeRadioButton("ASN"));         return p;    }private JRadioButton makeRadioButton(String label){JRadioButton button=new JRadioButton(label,false);button.setActionCommand(label);searchFor.add(button);return button;}private JRadioButton makeSearchInRadioButton(String label){JRadioButton button=new JRadioButton(label,false);button.setActionCommand(label);searchIn.add(button);return button;}private JPanel initSearchFields(){JPanel p=new JPanel();p.setLayout(new GridLayout(6,1,5,2));p.add(new JLabel("Search In:"));JRadioButton all=new JRadioButton("All",true);all.setActionCommand("All");searchIn.add(all);p.add(all);p.add(this.makeSearchInRadioButton("Name"));p.add(this.makeSearchInRadioButton("Mailbox"));p.add(this.makeSearchInRadioButton("Handle"));return p;}private JPanel initServerChoice(){final JPanel p=new JPanel();p.setLayout(new GridLayout(6,1,5,2));p.add(new JLabel("Search At:"));chosenServer.setText(server.getHost().getHostName());p.add(chosenServer);chosenServer.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event){try{server=new Whois(chosenServer.getText());}catch(UnknownHostException ex){JOptionPane.showMessageDialog(p,ex.getMessage(),"Alert",JOptionPane.ERROR_MESSAGE);}}});return p;}private class LookupNames implements ActionListener{public void actionPerformed(ActionEvent event){names.setText("");SwingWorker<String,Object>worker=new Lookup();worker.execute();}}private class Lookup extends SwingWorker<String,Object>{protected String doInBackground() throws Exception{Whois.SearchIn group=Whois.SearchIn.ALL;Whois.SearchFor category=Whois.SearchFor.ANY;String searchForLabel=searchFor.getSelection().getActionCommand();String searchInLabel=searchIn.getSelection().getActionCommand();if(searchInLabel.equals("Name"))group=Whois.SearchIn.NAME;  else if(searchInLabel.equals("Mailbox")){  group=Whois.SearchIn.MAILBOX;  }else if(searchInLabel.equals("Handle")){  group=Whois.SearchIn.HANDLE;  }if(searchForLabel.equals("Network")){category=Whois.SearchFor.NETWORK;}else if(searchForLabel.equals("Person")){category=Whois.SearchFor.PERSON;}else if(searchForLabel.equals("Host")){category=Whois.SearchFor.HOST;}else if(searchForLabel.equals("Domain")){category=Whois.SearchFor.DOMAIN;}else if(searchForLabel.equals("Organization")){category=Whois.SearchFor.ORGANIZATION;}else if(searchForLabel.equals("Group")){category=Whois.SearchFor.GROUP;}else if(searchForLabel.equals("Gateway")){category=Whois.SearchFor.GATEWAY;}else if(searchForLabel.equals("ASN")){category=Whois.SearchFor.ASN;}server.setHost(chosenServer.getText());return server.lookUpNames(searchString.getText(),category,group,exactMatch.isSelected());}protected void done(){try{names.setText(get());}catch(Exception ex){JOptionPane.showMessageDialog(WhoisGUI.this,ex.getMessage(),"Lookup Failed",JOptionPane.ERROR_MESSAGE);}}}          public static void main(String[] args){          try{          Whois server=new Whois();          WhoisGUI a=new WhoisGUI(server);          a.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);          a.pack();          EventQueue.invokeLater(new FrameShower(a));          }catch(UnknownHostException ex){          JOptionPane.showMessageDialog(null,"Could not locate default host"+Whois.DEFAULT_HOST,          "Error",JOptionPane.ERROR_MESSAGE);          }          }          private static class FrameShower implements Runnable{          private final Frame frame;          FrameShower(Frame frame){          this.frame=frame;          }          public void run(){          frame.setVisible(true);          }          }}


运行出来的效果:


第一次敲这么多代码,虽然不是自己写的,自己理解都花了好久。。。。


0 0
原创粉丝点击