Сокет подключается, даже если хост недоступен (не существует)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сокет подключается, даже если хост недоступен (не существует)

Сообщение Anonymous »

Я пытаюсь понять, почему

Код: Выделить всё

socket.connect(new InetSocketAddress(tool.getHost(), tool.getPortTool()), timeout);
не выводит исключение, если хост не существует.

Код: Выделить всё

package esempioSocket;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import esempioSocket.Tool;

public class Main {

public static void main(String[] args) throws IOException {

Tool tool = new Tool("10.39.188.101", 6653);

System.out.println("reachele 1: " + tool.isReachable() );

int timeout = 1500;

Socket socket = new Socket();
System.out.println("after new: " + socket);

try {
socket.connect(new InetSocketAddress(tool.getHost(), tool.getPortTool()), timeout);
System.out.println("after connect: " + socket);
} catch (UnknownHostException e) {
System.out.println("run() - UnknownHostException - tool: " + tool.getHost() + ":" + tool.getPortTool());
} catch (IOException e) {
System.out.println("run() - IOException - tool: " + tool.getHost() + ":" + tool.getPortTool());
}

if (socket.isConnected()) {
System.out.println("after isConnect: " + socket);
tool.setReachable(true);
try {
socket.close();
System.out.println("after close: " + socket);
} catch (IOException e) {
System.out.println("run() - socket close() " + e);
}
} else {
tool.setReachable(false);
}

System.out.println("reachele: " + tool.isReachable() );
System.out.println("last line: " + socket);

}
}
и инструменты класса

Код: Выделить всё

public class Tool {

private String host;
private Integer  portTool;
private boolean reachable;

Tool(String h, Integer port) {
this.host=h;
this.portTool=port;
}

........
set and getter
И если я запускаю ping, или telnet, или Tracert из командной строки, я не добиваюсь успеха (как и должно быть) (telnet через некоторое время возвращает мое приглашение).
Также

Код: Выделить всё

netstat -an | find "10.39.188.101"
и

Код: Выделить всё

netstat -an | find "6653"
нет результата!
Когда я запускаю программу, я ожидаю, что, поскольку хост не существует, сокет.connect выдаст мне исключение (или сообщение о том, что соединение не может быть установлено, вместо этого я получаю следующий результат:

Код: Выделить всё

reachele 1: false
after new: Socket[unconnected]
after connect: Socket[addr=/10.39.188.101,port=6653,localport=64473]
after isConnect: Socket[addr=/10.39.188.101,port=6653,localport=64473]
after close: Socket[addr=/10.39.188.101,port=6653,localport=64473]
reachele: true
last line: Socket[addr=/10.39.188.101,port=6653,localport=64473]
Если я сменю хост на 11.39.188.101, я получу:

Код: Выделить всё

reachele 1: false
after new: Socket[unconnected]
run() - IOException - tool: 11.39.188.101:6653
reachele: false
last line: Socket[unconnected]
Как и должно быть!!!! хост 11.39.188.101 не существует, но также не существует и 10.39.188.101.
Если я запускаю netstat, пока программа все еще работает, и сокет.close не достиг:
< img alt="введите здесь описание изображения" src="Изображение" />
arp:
Изображение

tracert:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/783 ... t-existing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»