我有一個TCP套接字客戶端向具有OutputStream的服務器發送請求。我需要發送這樣的例子:在java中通過TCP發送混合字符串和字節
REQ OP文件大小的數據
服務器接收使用in.readLine(信息),並需要創建一個新的.txt文件與數據接收。 我的問題是,我用分割成標記來分析信息,我不能轉換「數據」字符串通過字節數組,因爲我猜一些字節丟失。
如何在一行/命令中將數據發送到服務器(因爲我需要將字符串與字節數組混合)而不會丟失任何數據?
我有一個TCP套接字客戶端向具有OutputStream的服務器發送請求。我需要發送這樣的例子:在java中通過TCP發送混合字符串和字節
REQ OP文件大小的數據
服務器接收使用in.readLine(信息),並需要創建一個新的.txt文件與數據接收。 我的問題是,我用分割成標記來分析信息,我不能轉換「數據」字符串通過字節數組,因爲我猜一些字節丟失。
如何在一行/命令中將數據發送到服務器(因爲我需要將字符串與字節數組混合)而不會丟失任何數據?
編輯
可以強制執行命令由二進制數據轉換到Base64是完全一String
編碼String
。這會使服務器端的解析操作更容易,因爲您將接收1行數據作爲String
,並且分割起來更容易。這與HTTP的工作方式類似。
此外,請記住在處理命令時將Base64編碼數據轉換回服務器上的byte[]
。
您可以使用DataOutputStream,它允許您通過流發送不同類型。
初始化Stream後,您可以使用DataInputStream接收服務器上的數據(使用不同類型)。
也許這不是One-Liner,但流並不是設計成具有「單線」數據。
只需使用dataOutputStream.writeInt()/。write(bytes)發送它們,或者如果您想發送Stream writeUTF()。
關於dataInputStream,您當然需要使用readInt()/。read(bytes)或readUTF()。
編輯:使用TCP流驗證,你不「鬆」的數據,因爲如果有一個字節降連接將被關閉(不喜歡UDP)。
是從命令行執行還是由程序通過TCP/IP連接發送? –
該命令將由服務器處理,需要使用收到的相同數據創建.txt文件。但即時消失的過程中的字節,我不能再次創建該文件 –
我真的不在這裏的問題。爲什麼字節在發送時會丟失? –