Закрытие ServerSocket - как правильно проверить, закрыт ли клиентский сокет? - PullRequest
0 голосов
/ 15 февраля 2011

Я создаю новый поток, который запускает следующий код:

public static void startServer() throws IOException {
    serverSocket = new ServerSocket(55000);
    Socket clientSocket = serverSocket.accept(); 
}

Приведенный выше код выполняется в потоке. Теперь в моем основном классе я успешно создаю сокет подключение к серверу, и я проверил его целостность, которая в порядке. вот код:

Socket testServerSocket = new Socket("127.0.0.1", 55000);
assertEquals("/127.0.0.1", testServerSocket.getInetAddress().toString());
assertEquals(55000, testServerSocket.getPort());

Это работает отлично. Затем, снова с моего основного, я убиваю соединение с сервером, которое закрывает соединение на стороне сервера. Однако следующий код продолжает давать сбой: assertEquals (false, testServerSocket.isBound ());

Оно продолжает возвращаться к истине. Аналогично, если я проверяю удаленный IP-адрес для соединения, он не возвращает ноль, а скорее «/127.0.0.1». Есть идеи, почему это может происходить? Большое спасибо за вашу помощь

1 Ответ

1 голос
/ 15 февраля 2011

Я не эксперт по сокетам (я знаю, что это такое, но никогда не использовал сокеты на Java, только с C на Linux), но вроде JavaDoc для java.net.Socket состояния, 'Сокет является конечной точкой для связи между двумя машинами' .Таким образом, хотя закрытие сокета на стороне сервера разрушает соединение между двумя сокетами (на стороне сервера и на стороне клиента), ваш сокет на стороне клиента все еще связан, поэтому isBound() возвращает значение true.Может быть, вы хотели позвонить isConnected() или isClosed()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...