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

📄 usertoserver.java

📁 一个代理服务器的源码实现 本例中HTTP代理服务器默认于8000端口建立代理服务!
💻 JAVA
字号:
/*
 * Created on 2004-12-29
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author mq
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

import java.io.*;
import java.net.*;

public class UserToServer extends Thread {
	Pair pair;
	
	byte[] buffer = new byte[1024];
	char[] request= new char[1024];
	char[] dest   = new char[ 32];
	InetAddress inetaddress;

	public UserToServer(Pair pair)
	{
		this.pair = pair;
	}
	
	public void run()
	{
		while(pair.isConnectedToUserOK && !pair.ProxyToUser.isClosed())
		{
			boolean status = true;
			try
			{
				Socket s = pair.ProxyToUser;
				InputStream input = s.getInputStream();
				
				int len = input.read(buffer);
				
				if(len == 0) {
					status = false;
				}
				else {
					for(int i =0;i <len; i++) 
					{
						request[i] = (char)buffer[i];
					}
					request[len] = '\0';
					
					//Message.show(request);
					
					if(!ResolveInfo(request)) {
						status = false;
					}
					else if(!ConnectToServer()) {
						status = false;
					}
					else {
						ShareBuffer sharebuffer = new ShareBuffer();
						
						ServerToProxy servertoproxy = new ServerToProxy(pair,sharebuffer);
						servertoproxy.start();
						
						ProxyToUser proxytouser = new ProxyToUser(pair,sharebuffer);
						proxytouser.start();
					}
				} 
			}
			catch (Exception e)
			{
				e.printStackTrace();
				
				status = false;
			}
			
			if(!status)
			{
				//Message.show("usertoserver thread is ended.");
				try
				{
					pair.ProxyToUser.close();
					pair.isConnectedToUserOK = false;
				}
				catch (Exception e)
				{
					e.printStackTrace();
				}
				
				break;
			}
			//
		}
	}
	
	public boolean ResolveInfo(char[] info)
	{
		boolean first =false,sencond =false,third =false;
		boolean status =true;
		
		int j =0;
		for(int i =0;i <1024; i++)
		{
			if(info[i] == '/')
			{
				if(!first)
				{
					first = true;
					continue;
				}
				
				if(!sencond)
				{
					sencond = true;
					continue;
				}
				
				if(!third)
				{
					third = true;
					break;
				}
			}
			else
			{
				if(sencond && !third)
				{
					if(info[i] != ' ')
					{
						dest[j] = info[i];
						j ++;
					}
				}
			}
		}
		dest[j] = '\0';
		
		String addr = new String(dest);
		Message.show("用户请求:" + addr);
		try
		{
			if(dest[0]>'1' && dest[0]<'9') {
				inetaddress = InetAddress.getByAddress(addr.getBytes());
			}
			else {
				inetaddress = InetAddress.getByName(addr);
			} 
			
			//Message.show(inetaddress.getAddress());
		}
		catch (Exception e)
		{
			e.printStackTrace();
			status = false;
		}
		
		return status;
	}
	
	public boolean ConnectToServer()
	{
		boolean status = true;
		
		try
		{
			Socket s = new Socket(inetaddress,80);
			
			pair.ProxyToServer = s;
			pair.isConnectedToServerOk = true;
			
			OutputStream output = s.getOutputStream();
			output.write(buffer);
			output.flush();
		}
		catch (Exception e)
		{
			e.printStackTrace();
			status = false;
		}
		
		if(status)
		{
			Message.show("Connect to server " + inetaddress.toString() +" ok");
		}
		else
		{
			Message.show("Connect to server " + inetaddress.toString() +" failed"); 
		}
		
		return status;
	}
}

⌨️ 快捷键说明

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