我正在尝试在我的本地计算机上试用 SSLServerSocket 程序 - (该程序旨在使用基于服务器对象构造函数的单个参数的普通套接字或 SSL 套接字)。在纯数据中,该程序完全按预期工作,但使用 SSL:
socket.getInputStream().read();
始终返回 65535(即 0xFFFF),即使远程端已关闭。知道有什么问题吗?如果有帮助,我可以发布代码。
提前致谢
编辑:好的,现在我醒了 - 正如下面的人正确指出的那样,它是一种“断开连接”排序(isClosed 仍然返回 false 等,但输入流只有-1)。
查看 SSL 的调试信息,我注意到了这个 gem:
***
pool-2-thread-1, WRITE: TLSv1.1 Handshake, length = 36
%% Cached server session: [Session-3, TLS_ECDHE_RSA_WITH_RC4_128_SHA]
pool-2-thread-1, received EOFException: ignored
pool-2-thread-1, called closeInternal(false)
pool-2-thread-1, SEND TLSv1.1 ALERT: warning, description = close_notify
pool-2-thread-1, WRITE: TLSv1.1 Alert, length = 22
pool-2-thread-1, called closeSocket(selfInitiated)
After use
从代码:
final SSLSocket socket = (SSLSocket) ((SSLServerSocket)_ServerSocket).accept();
System.out.println("Before use");
socket.getInputStream().read();
System.out.println("After use");
所以,我 - 认为 - 客户端(在这种情况下,浏览器)没有正确地说“再见”就挂断了。
鉴于我的预期用途是 SSL/TLS 上的 websocket(wss://localhost:/),我尝试添加证书设置并将其添加到 Windows 7 的受信任证书中,但它似乎仍然不想工作( html 文件在我的本地系统上,并且连接到上面的 wss: URL,那么 keygen.exe 的服务器别名应该是 localhost 吗?)。
知道我哪里出错了吗?