Я пытаюсь проверить, открыты ли несколько пор, и если открыт порт 80 - отправьте HTTP-запрос, а затем покажите результат в консоли. Каждый порт проверяется в своем потоке.неизвестное исключение хоста при попытке отправить запрос
Я посылаю запросы, как этот
public static void send(Socket sock, String host) throws IOException{
PrintWriter pw = new PrintWriter(sock.getOutputStream());
pw.println("GET/HTTP/1.1");
pw.println("Host: " + host);
pw.println("");
pw.flush();
}
В классе TCPClient
я использую его и возвращать результат в виде байтов, а затем показать его утешать.
try {
sock = new Socket(host, port);
System.out.println("port " + port + " is in use");
// send request
HttpSender.send(sock, host);
BufferedReader bf = new BufferedReader(new InputStreamReader(sock.getInputStream()));
StringBuffer response = new StringBuffer();
String line = "";
while((line = bf.readLine()) != null) {
response.append(line);
response.append('\r');
}
bf.close();
return String.valueOf(response).getBytes(); // in method run I show it
} catch (SocketException e) {
return ("port " + port + " is free").getBytes();
}
Я создаю пул потоков для проверки портов.
public class ThreadPool {
private static int MAX_THREADS = 5;
private static String DESTINATION = "http://stackoverflow.com/";
private ExecutorService es = null;
public ThreadPool() {
es = Executors.newFixedThreadPool(MAX_THREADS);
}
public void perform(int start, int end) throws UnknownHostException {
for (int i = start; i <= end; i++) {
Runnable req = new TCPClient(DESTINATION, i);
es.execute(req);
}
es.shutdown();
while (!es.isTerminated()) {
}
;
System.out.println("all ports checked!");
}
}
Когда я установил назначения в качестве www.stackoverflow.com
и получил документ с текстом, который it was moved permanently to http://stackoverflow.com/
. Когда я установил этот пункт назначения, у меня есть UnknownhostException
.
Где проблема?