免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1450 | 回复: 0
打印 上一主题 下一主题

JAVA实现HTTP代理上网的测试程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-15 15:37 |只看该作者 |倒序浏览

                                                一、实验环境:
编程语言:Java2.0(运行在JVM(Java Virsual Machine))
开发工具:eclipce3.2
测试环境:局域网
二、需求分析
随着Internet技术的迅速发展,越来越多的计算机连入了Internet,出现了IP地址不足的现象.在这种情况下,代理服务器便应运而生了.
三、HTTP
Proxy的实现代码:
/**
* 本程序实现简单的HTTP代理客户端浏览器
* 步骤:
* 1、调用java.net包中的URL类并生成对象url;
* 2、调用url.openConnection()方法实现直接连接;
* 3、调用url.openConnection(Proxy)方法实现代理连接;
* 4、Proxy(Proxy.Type.HTTP, proxyAddress)实现HTTP代理的对象;
* 5、文件浏览功能的实现原理:将需要浏览的文件下载到本机,然后读取出来并显示在面板上;
* 作者:蓝蔡
*/
import javax.swing.*;
import java.awt.*;
import
java.awt.event.*;
import java.io.*;
import java.net.*;
public class ProxyTest {
    public static void main(String[] args)
    {
          JFrame  proxyFrame               =new JFrame("代理客户端");
          final JTextArea showArea         =new JTextArea(10,20);
          JPanel  northPanel               =new JPanel(new FlowLayout());
          JScrollPane centerPanel         =new JScrollPane(showArea);
          JPanel  southPanel               =new JPanel(new FlowLayout());
          JLabel  addressLabel             =new JLabel("输入网址:");
          JLabel  selectLabel              =new JLabel("选择代理类型:");
          JLabel  proxyLabel               =new JLabel("代理");
          JLabel  noProxyLabel             =new JLabel("直连");
          JButton     showButton          =new
JButton("浏览");
    final JRadioButton proxyRadioButton   =new JRadioButton();
    final JRadioButton noProxyRadioButton =new JRadioButton();
    final JTextField addressField         =new JTextField(15);
        proxyFrame.setSize(350,
350);
        proxyFrame.setLocation(150,
150);
        proxyFrame.setLayout(new BorderLayout());            
        showArea.setWrapStyleWord(true);
        //NorthPanel
        northPanel.add(addressLabel);
        northPanel.add(addressField);
        northPanel.add(showButton);
        proxyFrame.getContentPane().add(northPanel,"North");
        //CenterPanel                          proxyFrame.getContentPane().add(centerPanel,BorderLayout.CENTER);
        //SouthPanel
        southPanel.add(selectLabel);
        southPanel.add(proxyRadioButton);
        southPanel.add(proxyLabel);
        southPanel.add(noProxyRadioButton);
        southPanel.add(noProxyLabel);
        proxyFrame.getContentPane().add(southPanel,"South");
        proxyFrame.setDefaultCloseOperation(proxyFrame.EXIT_ON_CLOSE);
        proxyFrame.show();
        //点击“浏览”按钮的事件响应代码
        showButton.addActionListener(new ActionListener(){
            public void
actionPerformed(ActionEvent e)
            {
                String
str =addressField.getText();
                URL
url=null;
                URLConnection
urlCon=null;
                try
                {
                    showArea.setText("");
                    //直接连接                 if(!(proxyRadioButton.isSelected())
&&(noProxyRadioButton.isSelected())
)
                    {
                        url=new URL(str);
                        urlCon=url.openConnection();
                    }
                    //代理连接默认为HTTP
else if ((proxyRadioButton.isSelected())
&&!(noProxyRadioButton.isSelected()) )
{
SocketAddress
proxyAddress=new InetSocketAddress("192.168.1.100",808);
                            Proxy proxy=new
Proxy(Proxy.Type.HTTP, proxyAddress);
                         url=new
URL(str);
                        urlCon=url.openConnection(proxy);
                    }
else
                           new JOptionPane("提示").showMessageDialog(null, "请选择连接类型");              
                //以下显示连接的属性:主机名,端口,连接的文件类型,连接的文件长度
                final String line =System.getProperty("line.separator");
                showArea.append("host :"+url.getHost());
                showArea.append(line);
                showArea.append("port :"+url.getPort());
                showArea.append(line);
                 showArea.append("Contenttype :"+urlCon.getContentType());
                showArea.append(line);  
                 showArea.append("Contentlength :"+urlCon.getContentLength());
                final InputStream in=urlCon.getInputStream();
            final FileOutputStream out=new FileOutputStream("Temp.txt");
            final FileInputStream display=new FileInputStream("Temp.txt");
                //利用文件下载和读取的方式实现浏览功能
                //此处利用线程实现是为了实现多个任务的并发进行
                Runnable
r=new Runnable()
                {
                    int data;
                    byte[] data2=new byte[10*1024];
                    int len;
                        //此处利用实现synchronized同步,避免不同线程之间冲突
                    synchronized public void run()
                    {
                        try
{
                           while((data=in.read())!=-1)
                           out.write(data);
                            out.close();
                            in.close();
                            len=display.read(data2);
                            display.close();
                            showArea.append(new
String(data2,0,len));                                       
                          }catch(Exception ex)
                             System.out.println("读失败");
                        }};
                Thread
t=new Thread(r);
                t.start();
                }
                catch(Exception ex)
                            ex.getStackTrace();
            }           
        });  }}
程序运行结果如下:

实验结果分析:
如以下代码:
InputStream     in     
=urlCon.getInputStream();
     final FileOutputStream out   =new
FileOutputStream("Temp.txt");
final FileInputStream display=new FileInputStream("Temp.txt");
因为本程序的浏览功能是通过URL类形成文件输入流,然后把从网络上读到的信息存入临时文件"Temp.txt"中,然后通过另一个输入流读到文本显示域中(实现同步的原因),中间并没有经过处理,所以显示的不是网页形式而是纯文本形式!

               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/35830/showart_537991.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP