Как обнаружить удаленный сокет стороны близко? [дубликат]

82
задан Duncan Jones 30 May 2014 в 11:10
поделиться

2 ответа

isConnected метод не поможет, он возвратится true, даже если удаленная сторона закрыла сокет. Попробуйте это:

public class MyServer {
    public static final int PORT = 12345;
    public static void main(String[] args) throws IOException, InterruptedException {
        ServerSocket ss = ServerSocketFactory.getDefault().createServerSocket(PORT);
        Socket s = ss.accept();
        Thread.sleep(5000);
        ss.close();
        s.close();
    }
}

public class MyClient {
    public static void main(String[] args) throws IOException, InterruptedException {
        Socket s = SocketFactory.getDefault().createSocket("localhost", MyServer.PORT);
        System.out.println(" connected: " + s.isConnected());
        Thread.sleep(10000);
        System.out.println(" connected: " + s.isConnected());
    }
}

Запускают сервер, запускают клиент. Вы будете видеть, что это печатает "соединенный: верный" дважды, даже при том, что сокет закрывается во второй раз.

единственный способ действительно узнать путем чтения (Вы доберетесь-1 поскольку возвращаемое значение) или пишущий (IOException (поврежденный канал) будет брошен) на связанном Input/OutputStreams.

63
ответ дан WMR 24 November 2019 в 09:20
поделиться

Вы также можете проверить наличие ошибки выходного потока сокета при записи в клиентский сокет.

out.println(output);
if(out.checkError())
{
    throw new Exception("Error transmitting data.");
}
13
ответ дан 24 November 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: