2017-09-29 179 views
-2

我有一個TCP套接字客戶端向具有OutputStream的服務器發送請求。我需要發送這樣的例子:在java中通過TCP發送混合字符串和字節


REQ OP文件大小的數據


服務器接收使用in.readLine(信息),並需要創建一個新的.txt文件與數據接收。 我的問題是,我用分割成標記來分析信息,我不能轉換「數據」字符串通過字節數組,因爲我猜一些字節丟失。

如何在一行/命令中將數據發送到服務器(因爲我需要將字符串與字節數組混合)而不會丟失任何數據?

+0

是從命令行執行還是由程序通過TCP/IP連接發送? –

+0

該命令將由服務器處理,需要使用收到的相同數據創建.txt文件。但即時消失的過程中的字節,我不能再次創建該文件 –

+0

我真的不在這裏的問題。爲什麼字節在發送時會丟失? –

回答

0

編輯

可以強制執行命令由二進制數據轉換到Base64是完全一String編碼String。這會使服務器端的解析操作更容易,因爲您將接收1行數據作爲String,並且分割起來更容易。這與HTTP的工作方式類似。

此外,請記住在處理命令時將Base64編碼數據轉換回服務器上的byte[]

0

您可以使用DataOutputStream,它允許您通過流發送不同類型。

初始化Stream後,您可以使用DataInputStream接收服務器上的數據(使用不同類型)。

也許這不是One-Liner,但流並不是設計成具有「單線」數據。

只需使用dataOutputStream.writeInt()/。write(bytes)發送它們,或者如果您想發送Stream writeUTF()。

關於dataInputStream,您當然需要使用readInt()/。read(bytes)或readUTF()。

編輯:使用TCP流驗證,你不「鬆」的數據,因爲如果有一個字節降連接將被關閉(不喜歡UDP)。

相關問題