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

📄 httptunnelservlet.java

📁 java实现的代理程序 socket 编程实现的http 和socket 代理程序
💻 JAVA
字号:
package javatunnel;import java.io.*;import java.net.*;import java.util.*;import javax.servlet.http.*;/** * *JavaTunnel * *Copyright (C) 2002 Andr閟 Ederra * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*/public class HTTPTunnelServlet extends HttpServlet {	static String controlHeader = "TunnelControl";	static String CONNECT = "CONNECT";	static String IN = "IN";	static String OUT = "OUT";	static String ERROR = "ERROR";	HashMap connectionList = new HashMap();	int connectionCount = 0;	static final int BUFFERSIZE = 1024 * 10;	private static final int WAITCYCLE = 200;	public void init() {		System.out.println("JavaTunnel Servlet UP!");	}	/*public void service(ServletRequest req, ServletResponse resp) {		System.out.println("service");		System.out.println(req.getProtocol());		System.out.println(req);		Enumeration enum = req.getAttributeNames();		while (enum.hasMoreElements()) {			System.out.println(enum.nextElement());		}		try {			ServletInputStream in = req.getInputStream();			byte[] buffer = new byte[BUFFERSIZE];			int offset = 0;			int n = 0;			while (n != -1) {				System.out.println("pre readline");				n = in.readLine(buffer, offset, BUFFERSIZE);				System.out.println("post readline");				System.out.println(new String(buffer));				offset += n;			}		} catch (IOException ioe) {			ioe.printStackTrace();		}	}*/	protected void doGet(HttpServletRequest req, HttpServletResponse resp) {		executeCommand(req, resp);	}	protected void doPost(HttpServletRequest req, HttpServletResponse resp) {		executeCommand(req, resp);	}	private void executeCommand(		HttpServletRequest req,		HttpServletResponse resp) {		StringTokenizer tokenizer;		String control = req.getHeader(controlHeader);		if (control != null) {			tokenizer = new StringTokenizer(control);			//Process the command			String[] commands = new String[tokenizer.countTokens()];			int i = 0;			while (tokenizer.hasMoreElements()) {				commands[i] = tokenizer.nextToken();				i++;			}			if (commands[0].equals(CONNECT)) {				String connection =					createConnection(						commands[1],						Integer.parseInt(commands[2]));				resp.setHeader(controlHeader, CONNECT + " " + connection);			} else if (commands[0].equals(IN)) {				handleIncomingData(commands[1], req, resp);			} else if (commands[0].equals(OUT)) {				handleOutcomingData(commands[1], req, resp);			}		} else {			try {				resp.sendError(HttpServletResponse.SC_BAD_REQUEST);			} catch (IOException ioe) {				System.out.println(ioe);				ioe.printStackTrace();			}		}	}	private String createConnection(String host, int port) {		try {			Socket remoteSocket = new Socket(host, port);			synchronized (this) {				connectionCount++;				connectionList.put(					String.valueOf(connectionCount),					remoteSocket);				return String.valueOf(connectionCount);			}		} catch (Exception e) {			System.out.println(e);			e.printStackTrace();			return null;		}	}	private void handleOutcomingData(		String ticket,		HttpServletRequest req,		HttpServletResponse resp) {		Socket outSocket = (Socket) connectionList.get(ticket);		if (outSocket != null) {			try {				OutputStream outputStream = outSocket.getOutputStream();				byte[] buffer = new byte[BUFFERSIZE];				int n = 0;				while (n != -1) {					n = req.getInputStream().read(buffer);					if (n != -1) {						outputStream.write(buffer, 0, n);						outputStream.flush();					}				}				OutputStream responseStream = resp.getOutputStream();				responseStream.write("OK".getBytes());				responseStream.flush();				responseStream.close();			} catch (Exception e) {				System.out.println(e);				e.printStackTrace();			}		} else {			try {				OutputStream responseStream = resp.getOutputStream();				responseStream.write("ERROR".getBytes());				responseStream.flush();				responseStream.close();			} catch (Exception e) {				System.out.println(e);				e.printStackTrace();			}		}	}	private void handleIncomingData(		String ticket,		HttpServletRequest req,		HttpServletResponse resp) {		Socket inSocket = (Socket) connectionList.get(ticket);		if (inSocket != null) {			try {				InputStream inputStream = inSocket.getInputStream();				byte[] buffer = new byte[BUFFERSIZE];				int n;				n = inputStream.read(buffer);				while (n == -1) {					try {						Thread.sleep(WAITCYCLE);					} catch (InterruptedException ie) {						ie.printStackTrace();					}					n = inputStream.read(buffer);				}				resp.getOutputStream().write(buffer, 0, n);				resp.getOutputStream().flush();				resp.getOutputStream().close();				//}			} catch (Exception e) {				System.out.println(e);				e.printStackTrace();			}		}	}}

⌨️ 快捷键说明

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