Как SSLSocket отправляет сердечное соединение, как Socket.sendUrgentData () - PullRequest
0 голосов
/ 14 декабря 2018

Я использовал Socket.sendUrgentData(), чтобы поддерживать связь.Но для безопасности я сейчас пытаюсь изменить его на SSLSocket.SSLSocket не наследует этот метод за исключением:

SSLSocket not supproted this method.

Есть ли лучший способ, чем реализовать наш own sendUrgentData(), что означает реализацию метода отправки соединения с сердцем.

Мой кодкак это:

public void checkConnection(SSLSocket sslSocket) {
    if(sslSocket == null){
        return;
    }
    try{
        //socket.sendUrgentData(0xFF);
        sslSocket.getOutputStream.write(0xFF);
    } catch (IOException e){
        e.printStackTrace();
        return;
    }
}
public SSLSocket init(){
    /**
     * ip,port,KeyManagerFactory, TrustManagerFactory
     */
    return (SSLSocket)context.getSocketFactory().createSocket(host, port);
}

Или несколько советов по оптимизации sslSocket.getOutputStream.write(0xFF)?Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Как вы заметили, реализации SSLSocket не поддерживают sendUrgentData.Это из исходного кода для sun.security.ssl.BaseSSLSocketImpl:

/**
 * Send one byte of urgent data on the socket.
 * @see java.net.Socket#sendUrgentData
 * At this point, there seems to be no specific requirement to support
 * this for an SSLSocket. An implementation can be provided if a need
 * arises in future.
 */
@Override
public final void sendUrgentData(int data) throws SocketException {
    throw new SocketException("This method is not supported "
                    + "by SSLSockets");
}

Затем вы спрашиваете:

Или некоторые предложения по оптимизации sslSocket.getOutputStream.write(0xFF)

Предполагая, что вы имеете в виду «ускорение», а не «оптимизация», вы должны вызывать flush() в потоке после write().

Но вам также нужно быть немного осторожнее с этим.Если вы обернули выходной поток сокета стеком BufferedOutputStream, Writer или чем-то подобным, то погружение вниз и запись байта в базовый поток может испортить ситуацию.Ваше сообщение «сердцебиение» (если это так) может появиться случайно в середине какого-то другого сообщения.

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