我使用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)
的一些建议?谢谢。 最佳答案
如您所述,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
堆栈或类似的东西包装了套接字的输出流,那么深入研究并向底层流写入一个字节可能会使事情搞砸。您的“心跳”消息(如果是这样的话)可能会随机出现在其他消息的中间。关于java - SSLSocket如何发送像Socket.sendUrgentData()这样的心脏连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53778891/