⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webproxyserver.java

📁 SSD8第一次考试答案
💻 JAVA
字号:
/*
 * Created on 2009-4-28
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Guest
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.net.*;
import java.util.*;
import java.io.*;
public class WebProxyServer implements Runnable{
	private Socket client;
	private BufferedReader userRequest;
	private DataOutputStream toUser;
	private String type;
	private String urlAds;
	private String serverName;
	private int port = 0;
	private String filePath;
	private DataInputStream fromWeb;
	private DataOutputStream toWeb;
	public WebProxyServer()
	{
		System.out.println("Wait clients request");
		try 
		{
			ServerSocket server = new ServerSocket(8000);				
			while(true)
			{
				client = server.accept();
				Thread thread = new Thread(this, "WebProxyServer Thread");
				thread.start();
			}	
		}catch(Exception e) 
		{
			System.out.println(e.toString());
		}
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	public void run() 
	{
		// TODO Auto-generated method stub
		while(true)
		{
			try
			{
				userRequest = new BufferedReader(new InputStreamReader(client.getInputStream()));
				toUser = new DataOutputStream(client.getOutputStream());
				String request = userRequest.readLine();
				//StringTokenizer 这个类它可以根据自己的方式按照一定的规则来拆分一个字符串
				StringTokenizer tokens = new StringTokenizer(request);
			
				if (tokens.countTokens() < 2) 
				{  
					toUser.writeBytes(" request is invaild\n\r");  
					break;  
				}	 		
				else 
				{ 
		          type = tokens.nextToken();  
		          urlAds = tokens.nextToken(); 
		          if (!type.equals("GET")) 
		          { 		         
		            toUser.writeBytes("type error,must be get\n\r");  
		            break;  
		          }  
		          if (!urlAds.toUpperCase().startsWith("HTTP://")) 
		          {  
		       
		            toUser.writeBytes("url error,must be HTTP://\n\r");  
		            break;  
		          } 		
				}
		       Server();
		       Client();
	           break; 
			}
			catch(IOException e)
			{
				System.out.println(e.toString());
			}
			 catch (Exception e) {
				e.printStackTrace();
			}
			
		} 
		
	}
	public void Server()
	{
		//substring方法返回位于 String 对象中指定位置的子字符串  
		urlAds = urlAds.substring(7);  
		serverName = urlAds.substring(0, urlAds.indexOf("/"));  
		filePath = urlAds.substring(urlAds.indexOf("/"));  
		if (serverName.contains(":")) 
		{  
		    port= Integer.parseInt(serverName.substring(serverName.indexOf(":") + 1));  
		    serverName = serverName.substring(0, serverName.indexOf(":"));  
		} 
		else
		{  
		    port = 80;  
		}  
	}
	
	public void Client()throws Exception
	{

        Socket clientSocket = new Socket(serverName, port);  
        fromWeb = new DataInputStream(clientSocket.getInputStream());  
        toWeb = new DataOutputStream(clientSocket.getOutputStream());  

        toWeb.writeBytes("GET " + filePath  
            + " HTTP/1.0\r\n\r\n");  
        toWeb.flush();

        byte[] bytes = new byte[1024];  

        int size = 0;  

        while ((size = fromWeb.read(bytes, 0, 1024)) != -1) 
        {  
        	toUser.write(bytes, 0, size);  
            toUser.flush();
        }  
        System.out.println(serverName);
		
	}
	public static void main(String[] args) throws Exception
	{
		new WebProxyServer();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -