Закрытие сокета, когда поток умирает - PullRequest
1 голос
/ 24 апреля 2019

У меня проблема с закрытием сокета, когда Java-программа завершена (по исключению или вручную). Я мог бы использовать некоторую помощь!

Я пишу программу на Java, которая использует TCP-сокет для связи с сервером. У меня есть сокет, который используется двумя потоками - один использует его для отправки данных, а другой - для получения данных. Моя текущая идея для решения этой проблемы - закрыть сокет, в то время как поток принимающих данных умирает (я хотел бы услышать больше идей). Я не нашел способа закрыть сокет, когда поток (вся программа) завершается. Есть ли способ вызвать метод close, когда поток умирает? (Ищете что-то вроде деструктора C ++) Iv'e пытался использовать оператор и try-finally, и это не сработало.

    public class Receive implements Runnable {
    ....
    ....
        public void run() {
            Socket socket = getSocket() // Gets socket from a singleton class.
            ....
            while (true){
                ....
                readFromSocketFunction();
                ....
            }
            ....
        } // Would like to close the socket when going out from this scope.

    ....
    }

Прямо сейчас, когда я завершаю программу, сокет продолжает жить. Я написал простой клиент на Python и заметил, что при прерывании клиента во время работы он все еще закрывает сокет (сервер отключается от клиента), и я хотел бы иметь такое же поведение в моей программе.

Спасибо !!

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