1

目前我正在开发一个将二进制数据命令发送到设备面板的 Java 客户端。我有一个奇怪的问题,如果我为每个套接字连接(一个 TCP 会话)发送一个命令,所有命令都可以正常工作。但是当我在一个连接中发送多个命令(相同的 TCP 会话)时,第一个命令会在设备面板上完美执行,但在第二个命令中它会获得两个额外的字节值0x010x00. 这很奇怪,过去几天我一直在尝试,但找不到答案。

我的代码:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
sslsocket = (SSLSocket) sslsocketfactory.createSocket(deviceIP, port);
//Output Streams
OutputStream outputStream = sslsocket.getOutputStream();

outputStream.write(command1);

outputStream.write(command2);

注意command1command2是字节数组:

  • command1 中的值 = 01,01,01
  • command2 中的值 = 01,34,45,34,56

设备面板的日志为:

Received command: 01 01 01
Received command: 01 00 01 03 45 34 56

可能是什么问题呢?您的建议将不胜感激。

4

2 回答 2

2

我对带有 SSLSocket 的 Java 6 应用程序有同样的问题,服务器在两次写入之间收到了一个额外的字节。额外字节是 SSL 连接的 CBC 保护。如果您不希望有额外的字节,请添加一个 java 属性 -Djsse.enableCBCProtection=false 以禁用 CBC 保护。

于 2013-06-19T15:51:30.830 回答
0

Java 和您的操作系统不会添加额外的字节。否则一半的互联网将无法工作。很明显,要么设备出现故障,要么您错误地观察它。

于 2012-11-15T22:26:55.617 回答