繁体   English   中英

Java 8 springboot服务器中的套接字连接

[英]Socket connection in java 8 springboot server

我们有一个使用Java 6构建的旧应用程序。它使用DataInputStream和DataOutputStream通过套接字进行通信。

//要写入流的代码段

public void writeMessage(DataOutputStream out) throws IOException {
    int pageSize = 10;  
    logger.info("pageSize: " + pageSize);
    out.writeInt(pageSize);
}

//要从流中读取的代码段

public void readMessage(DataInputStream in) throws IOException {
    int pageSize = in.readInt();    
    logger.info("pageSize: " + pageSize);
}

它曾经在jboss中作为应用服务器运行,而postgres作为数据库运行。 现在,我们已将应用程序迁移到springboot。 它使用嵌入式tomcat服务器和相同的postgres DB。

代码没有从流中正确读取。 调用in.readInt()时出现java.io.EOFException

注意:我们使用SSL / TLSv1,并且已正确设置证书和密钥库。 建立套接字连接和写入流时也没有例外。 另外,所有流/套接字连接均已正确关闭,并且相同的代码在jboss服务器中工作正常。

编辑:我尝试只使用InputStreamBufferedInputStream而不是DataInputStream ,结果更加令人困惑。

假设我向流发送了20个字节:使用inputStream.read只能读取1个字节,并且它会过早到达EOF。 使用bufferedInputStream.read ,读取19个字节,而丢失1个字节。

我正在使用inputStream或bufferedInputStream,而不是一个接一个。

请让我知道我是否会丢失一些东西。

我们找到了解决方案。 似乎Java在1.6之后更改了jsse安全性

解决的办法是添加一个属性

-Djsse.enableCBCProtection = false

这里提到类似的地方,人们在面对SQL连接问题时建议更改Java版本或添加此属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM