Я пытался запустить простую программу тестирования сети, но без результатов.
Сервер:
import java.io.*;
import java.net.*;
public class ServerTest {
public static void main(String[] args) {
final int PORT_NUMBER = 44827;
while(true) {
try {
//Listen on port
ServerSocket serverSock = new ServerSocket(PORT_NUMBER);
System.out.println("Listening...");
//Get connection
Socket clientSock = serverSock.accept();
System.out.println("Connected client");
//Get input
BufferedReader br = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
System.out.println(br.readLine());
br.close();
serverSock.close();
clientSock.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
Клиент:
import java.io.*;
import java.net.*;
public class ClientTest {
public static void main(String[] args) throws IOException {
final int PORT_NUMBER = 44827;
final String HOSTNAME = "xx.xx.xx.xx";
//Attempt to connect
try {
Socket sock = new Socket(HOSTNAME, PORT_NUMBER);
PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
//Output
out.println("Test");
out.flush();
out.close();
sock.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
Программа отлично работает, когда я использую 127.0.0.1 или свой внутренний IP-адрес в качестве имени хоста. Но всякий раз, когда я переключаюсь на свой внешний IP-адрес, возникает ошибка java.net.ConnectException: соединение отказано: ошибка подключения
.
Я специально выбрал такой необычный порт, чтобы проверить, была ли это проблема, с не повезло. Я могу без проблем подключиться с помощью telnet, но когда я пытаюсь получить доступ к порту с помощью canyouseeme.org, он сообщает мне, что время соединения истекло. Я даже попытался отключить все брандмауэры и антивирусы, включая стандартные для Windows и брандмауэр маршрутизатора, со всеми перенаправленными портами и включенной DMZ, но он по-прежнему говорит, что соединение истекло. Я использую Comcast в качестве своего интернет-провайдера и сомневаюсь, что они блокируют такой случайный порт.
Когда я использую трассировщик пакетов, он показывает TCP-трафик, когда мой компьютер отправляет SYN и получает RST / ACK, поэтому это выглядит как стандартная блокировка порт, и никакого другого подозрительного пакетного трафика не происходило.
Я понятия не имею, что происходит в данный момент; Я испробовал практически все известные мне уловки. Если кто-нибудь знает, почему может быть заблокирован порт или хотя бы какой-то способ заставить программу работать, это было бы очень полезно.