服务器: Linux
测试客户端: OS X、CentOS、Windows
服务器/客户端编程语言: Java
Server-side
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String string = null;
while ((string = bufferedreader.readLine()) != null) {
System.out.println(string);
System.out.flush();
}
使用此选项执行的服务器程序
-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456
证书:在 Linux 上使用 keytool 创建
keytool -genkey -keystore mySrvKeystore -keyalg RSA
客户端
....
SocketAddress sa = new InetSocketAddress(ip, port);
....
SSLContext sslContext = SSLContext.getInstance("SSL");
....
sslContext.init(.........., new SecureRandom());
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
this.clientSock = socketFactory.createSocket();
this.clientSock.connect(sa, this.ConnectTimeout);
this.clientSock.setSoTimeout(this.RecvTimeout);
this.clientSock.setReuseAddress(true);
....
public boolean writeTo(String procname, BufferedOutputStream out, byte[] data)
{....
out.write(data, 0, data.length);
out.flush();
....}
结果:一切正常,但只有来自 Windows 的客户端程序,写入输出流时会延迟。
- 已建立 SSL 套接字连接
- 设置输出/输入流
- 将数据写入输出流
- 冲洗
... 4-5 秒后,它无缘无故地卡在了这里...
- 关闭
延迟发生在从 Windows 7、Windows XP 执行的同一个 java 客户端简单程序上。从 3 台不同的 Windows 机器测试。其他地方都很好。
所以我尝试用 C 和 PHP 构建 SSL 简单客户端,在 Windows 上效果很好。这意味着只有 Java 客户端方法不起作用。
有没有人有任何想法或类似的经验?我看过一些怀疑 WINS/DNS 的帖子,但这里的情况似乎并非如此。有趣的是,每台 Windows 机器总是有大约 4-5 秒的延迟。
非常感谢您提前提出的意见。