Java SSLSocket的问题

Java SSLSocket的问题,java,sockets,ssl,networking,sslsocketfactory,Java,Sockets,Ssl,Networking,Sslsocketfactory,我目前正在从事一个客户机-服务器项目。 出于安全原因,我决定使用SSL 我尝试将所有Socket和ServerSocket对象转换为它们的SSL变体,但没有成功。 当我使用 SSLVIEVSocket < /代码>并连接到它时,服务器端的套接字输出在 OutPuthFrase.Wrad(Byth[]) 中冻结。 下面是我用来创建SSL套接字的函数, ContextController.CONTEXT是SSLContext和常量。DEBUG是切换SSL的快速方法: public static Se

我目前正在从事一个客户机-服务器项目。
出于安全原因,我决定使用SSL

我尝试将所有
Socket
ServerSocket
对象转换为它们的SSL变体,但没有成功。
当我使用<代码> SSLVIEVSocket < /代码>并连接到它时,服务器端的套接字输出在 OutPuthFrase.Wrad(Byth[])

中冻结。 下面是我用来创建SSL套接字的函数,
ContextController.CONTEXT
SSLContext
常量。DEBUG
是切换SSL的快速方法:

public static ServerSocket server(int port, int backlog) throws IOException {
    return Constants.DEBUG ? new ServerSocket(port, backlog) : CONTEXT.getServerSocketFactory().createServerSocket(port, backlog);
}

public static Socket client(InetSocketAddress address) throws IOException {
    return Constants.DEBUG ? new Socket(address.getHostName(), address.getPort())
            : ContextController.CONTEXT.getSocketFactory().createSocket(address.getHostName(), address.getPort());
}

public static Socket client() throws IOException {
    return Constants.DEBUG ? new Socket() : ContextController.CONTEXT.getSocketFactory().createSocket();
}
Constants.DEBUG=true
(即SSL关闭)时,它工作,但当SSL打开时,它在无限期发送一些数据后会冻结,如上所述。我怎样才能解决这个问题

编辑
以下是
ContextController.CONTEXT

(注意,我知道我应该使用一个实际的
TrustManager
,但首先我希望它起作用)

编辑2
下面是它冻结位置的堆栈跟踪,注意它没有崩溃,而是挂起:

Thread [ClientExecThread #0] (Suspended)    
owns: AppOutputStream  (id=54)  
owns: ByteArrayOutputStream  (id=55)    
SocketOutputStream.socketWrite0(FileDescriptor, byte[], int, int) line: not available [native method]   
SocketOutputStream.socketWrite(byte[], int, int) line: 111  
SocketOutputStream.write(byte[], int, int) line: 155    
OutputRecord.writeBuffer(OutputStream, byte[], int, int, int) line: 431 
OutputRecord.write(OutputStream, boolean, ByteArrayOutputStream) line: 417  
SSLSocketImpl.writeRecordInternal(OutputRecord, boolean) line: 876  
SSLSocketImpl.writeRecord(OutputRecord, boolean) line: 847  
AppOutputStream.write(byte[], int, int) line: 123   
ByteArrayOutputStream.writeTo(OutputStream) line: 167   
SocketStream.streamPacket(Packet) line: 181 
ClientThread.lambda$8(Group) line: 150  
1427646530.run(Object) line: not available  
ClientThread.execute() line: 444    
ClientThread$ClientExecThread.run() line: 261

我在SocketStream.streamPacket(Packet)181后面的行中放置了一个断点,但它从未到达。

我真的不知道为什么会发生这种情况,我不需要SSL的所有方面(只有加密部分,这就是为什么我没有实现
信任管理器
),所以我决定实现一个Diffie Hellman

这符合预期,并结合DH和AES,我已根据我的要求对流量进行加密


谢谢大家的帮助

我们可以看看ContextController.CONTEXT的样子吗?使用
SSLContext.getInstance(“TLS”)而不是
“SSL”
。另外,在定义服务器时,请实现
TrustManager
。因为您没有提供任何错误,所以很难判断实际发生了什么。这就是问题所在,没有错误。它只是冻结。对等方是否正在进行任何读取?Java SocketOutputStream调用OS TCP/IP堆栈进行发送,如果发送缓冲区已满且接收方未接受(确认)数据,则会阻止发送。
Thread [ClientExecThread #0] (Suspended)    
owns: AppOutputStream  (id=54)  
owns: ByteArrayOutputStream  (id=55)    
SocketOutputStream.socketWrite0(FileDescriptor, byte[], int, int) line: not available [native method]   
SocketOutputStream.socketWrite(byte[], int, int) line: 111  
SocketOutputStream.write(byte[], int, int) line: 155    
OutputRecord.writeBuffer(OutputStream, byte[], int, int, int) line: 431 
OutputRecord.write(OutputStream, boolean, ByteArrayOutputStream) line: 417  
SSLSocketImpl.writeRecordInternal(OutputRecord, boolean) line: 876  
SSLSocketImpl.writeRecord(OutputRecord, boolean) line: 847  
AppOutputStream.write(byte[], int, int) line: 123   
ByteArrayOutputStream.writeTo(OutputStream) line: 167   
SocketStream.streamPacket(Packet) line: 181 
ClientThread.lambda$8(Group) line: 150  
1427646530.run(Object) line: not available  
ClientThread.execute() line: 444    
ClientThread$ClientExecThread.run() line: 261