Java Socket Client向设备发送额外的字节

时间:2012-11-15 20:12:52

标签: java sockets tcp embed socket.io

目前我正在开发一个将二进制数据命令发送到设备面板的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

可能是什么问题?您的建议将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

Java和您的操作系统不会添加额外的字节。否则一半的互联网将无法正常工作。显然,设备出现故障或您误观察。