Я пытаюсь запустить простую сетевую тестовую программу без каких-либо результатов.
Сервер:
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: Connection refused: connect
.
Я специально выбрал такой необычный порт, чтобы убедиться, что это проблема, без везения. Я могу подключиться без проблем с помощью telnet, но когда я пытаюсь получить доступ к порту с помощью canyouseeme.org, он сообщает мне, что время ожидания подключения. Я даже пытался отключить все брандмауэры и антивирус, включая стандартные по умолчанию Windows и брандмауэр маршрутизатора, причем все переадресованные порты и DMZ включены, и он все еще говорит о том, что время ожидания подключения. Я использую Comcast как мой провайдер, и я сомневаюсь, что они блокируют такой случайный порт.
Когда я использую трассировщик пакетов, он показывает TCP-трафик, когда мой компьютер отправляет SYN и получает RST/ACK, поэтому он выглядит как стандартный заблокированный порт, и никакой другой подозрительный пакетный трафик не происходит.
Я понятия не имею, что происходит на данный момент; Я довольно много пробовал каждый трюк, который я знаю. Если кто-нибудь знает, почему порт может быть заблокирован или, по крайней мере, каким-то образом сделать работу программы, это будет очень полезно.