目前我正在開發一個Java客戶端,它將二進制數據命令發送到設備面板。我有一個奇怪的問題,如果我每個套接字連接發送一個命令(一個TCP會話),所有命令都可以正常工作。但是,當我在一個連接(相同的TCP會話)中發送多個命令時,第一個命令在設備面板上完全執行,但在第二個命令中,它獲得了兩個額外的字節值0x01
和0x00
。這很奇怪,我過去幾天一直在嘗試,但找不到答案。Java Socket客戶端向設備發送額外的字節
我的代碼:
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
sslsocket = (SSLSocket) sslsocketfactory.createSocket(deviceIP, port);
//Output Streams
OutputStream outputStream = sslsocket.getOutputStream();
outputStream.write(command1);
outputStream.write(command2);
注意command1
和command2
是字節數組:
- 價值命令1 = 01,01,01
- 價值命令2 = 01,34,45 ,34,56
設備面板的日誌是:
Received command: 01 01 01
Received command: 01 00 01 03 45 34 56
可能是什麼問題?您的建議將受到高度讚賞。
你可以使用純TCP(無SSL)進行測試嗎?然後你可以檢查tcpdump並找出命令是否正確發送。也許這是失敗的接受方。 – Kylo
沒有我不能,因爲設備只有在設備上打開SSL基本端口,我已經檢查了字節的內容之前寫在流看起來完美,但是當我檢查設備的日誌有兩個字節出現在日誌中。 – zaffargachal
該設備如何知道發送的命令的長度?也許你錯過了協議中的東西?這總是01 00是添加?你有沒有嘗試改變這個第一個命令?然後會發生什麼? – Kylo