У меня есть настройка java приложения на героку. Он должен получить трафик c из портов 443 и 80 (доступные порты для публикации c на heroku) и должен обработать его и отправить обратно клиенту после некоторой операции. Как перенаправить трафик c с порта 80 или 443 на мое приложение java?
Клиент подключается по сети netcat к heroku
nc [server-ip] [port]
Порт предоставляется приложению java по аргументу командной строки
java код приложения:
import java.io.*;
import java.net.*;
import java.util.ArrayList;
public class Launcher {
public static ArrayList<Thread> ClientThreads = new ArrayList<>();
public static void main(String[] args) {
System.out.println("Starting Listener");
int port;
ServerSocket listener = null;
// Parse Arguments
for (String arg: args) {
if (arg.contains("-h")) {
System.out.println("Usage: listener [port]");
return;
} else {
try {
port = Integer.parseInt(arg);
listener = new ServerSocket(port);
} catch (NumberFormatException e) {
e.printStackTrace();
System.out.println("Invalid port");
return;
} catch (IOException e) {
e.printStackTrace();
System.out.println("Port cannot be used. Try another port");
return;
}
}
}
try {
int ThreadID = 0;
while (true) {
assert listener != null;
Socket client = listener.accept();
int finalThreadID = ThreadID;
ClientThreads.add( new Thread(() -> HandleCon(client, finalThreadID), "Client-Thread-"+finalThreadID));
ClientThreads.get(finalThreadID).start();
ThreadID = ClientThreads.size() - 1;
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Some error occurred");
}
}
public static void HandleCon(Socket Client, int Id) {
try {
System.out.println(Client.getInetAddress().getHostAddress() + " has connected");
BufferedReader Reader = new BufferedReader(new InputStreamReader(Client.getInputStream()));
PrintWriter Writer = new PrintWriter(Client.getOutputStream());
while (true) {
Writer.print("Enter a command: ");
Writer.flush();
String command = Reader.readLine();
if (command.equalsIgnoreCase("exit")) {
System.out.println(Client.getInetAddress().getHostAddress() + " has disconnected");
Client.close();
break;
}
System.out.println(Client.getInetAddress().getHostAddress() + " -> " + command);
Writer.println("You have entered " + command);
Writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println(Client.getInetAddress().getHostAddress() + " has disconnected");
}
ClientThreads.remove(Id);
}
}