Прокси-сервер выступает в качестве сервером между клиентским компьютером и другим сервером. Всякий раз, когда человек или другой компьютер делает запрос на удаленный сервер, компьютер прокси-сервера перенаправляет запрос клиентского компьютера и ответ удаленного сервера. Оба компьютера передают данные, не зная, что прокси-сервер подключен к обоим. В результате, прокси-сервер должен быть в состоянии заменять роль как клиента (запрос и получение), так и сервера (отвечать на запросы).

1. Скачайте и установите последнюю версию комплекта Java для разработчиков от компании Sun Microsystems, если она еще не установлена на вашем компьютере. Откройте любой текстовый редактор или вашу интегрированную среду разработки. В целях поддержки поперечной совместимости между клиентом и сервером, общий интерфейс определяется для обеспечения сопоставимости данных. Java IO и Net библиотеки импортируются и три общих метода определены для прокси-сервера:
import java.io.*;
import java.net.*;
interface mySockets
{
String readLine();
void wrtieLine(String myString);
void dispose();
}

2. Определите Prozy класс путем реализации SocketInterface. Конструктор класса принимает три аргумента: адрес хоста, IP-адрес и порт, а также стоит ли ждать соединения или нет
public class SocketProxy implements mySockets
{
private Socket mySocket;
private BufferedReader myIn;
private PrintWriter myOut;
public SocketProxy( String myHost, int myPort, boolean myWait )
{
3. Подождите, пока будет установлено новое соединение. После того, как соединение будет установлено, входной поток BufferedReader будет открыт и передан в выходной поток PrintWriter класса, который используется для передачи сообщения:
try {
if (myWait) {
ServerSocket myServer = new ServerSocket( myPort );
mySocket = myServer.accept();
}
else
mySocket = new Socket( myHost, myPort );
myIn = new BufferedReader( new InputStreamReader(
mySocket.getInputStream()));
myOut = new PrintWriter( mySocket.getOutputStream(), true );
} catch( IOException e ) { e.printStackTrace(); }
}

4. Используйте readLine для чтения входного потока и возврата к writeLine, который используется для передачи информации в выходной поток, направленный клиентскому компьютеру (получателю).
public String readLine() {
String myString = null;
try { myString = myIn.readLine();
} catch( IOException e ) { e.printStackTrace(); }
return myString;
}
public void writeLine( String myString ) {
myOut.println( myString );
}

5. Закройте сетевой socket, когда прокси-сервер осуществится с помощью передачи информации между клиентом и сервером.
public void dispose() {
try {
mySocket.close();
} catch( IOException e ) { e.printStackTrace(); }
} }