📄 webproxyserver.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 + -