今天寫walker的網路傳輸, 在傳輸檔案時, 出現一點問題。
1.如果傳輸文字檔案, 只要乙個位元組乙個位元組地對應傳送過去即可。
2.如果傳輸二進位制檔案,也只要乙個位元組乙個位元組傳送過去就可以。。
讀寫檔案,都是以位元組流的形式。最後用vim開啟時,都是乙個位元組 轉換 成乙個字元出來給人看。
這次出現的問題是這樣的,要實現以下乙個功能:
1(有問題).先傳乙個string, ( strip.size() bytes),乙個空格(1byte), int(4bytes), 換行符(1bytes). 檔案能傳,接收檔案的時候,能以字元全部接收過來,但是因為不知道其格式,用文字檔案來顯示的話, 字串可以正常顯示, 但是4個位元組的int, 顯示出來卻不對了。
解決方法:
1(推薦,)在傳送的時候,將int也轉換成字元來傳送(sprintf)~~ , 接收到的檔案直接就能看了, 要用時,再轉成整型.(atoi)
2 (不推薦) 自定義協議, 傳送檔案的時候,額外定義協議, 比如 len string 4 int, 表示先讀個len,然後讀len個位元組存為字串,再讀個len=4,再讀4個位元組存為int.這種方法比較不推薦,因為我接收檔案的方式已經寫好,是tcp無邊界,一次讀4k的了~~ 去改無限麻煩。
總結:網路傳輸中的檔案,要把每個資料都看成字元,而不要還有整數之類的看法。
把上面的問題,全部看成字元,收到所有檔案後,要進行額外處理,再去慢慢轉換。
文字檔案與二進位制檔案
從本質上說所有檔案都是二進位制檔案,文字i o是在二進位制i o基礎上提供的一層抽象,它封裝了字元的編碼和解碼過程。在文字i o中自動進行編碼與解碼。在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有規定格式的,由可理解的的ascii以及其它編碼文字組成的檔...
文字檔案與二進位制檔案
維基百科 二進位制檔案一般指包含ascii及擴充套件ascii字元中編寫的資料或程式指令的檔案。廣義的二進位制檔案即為檔案,由檔案在外部儲存裝置的存放方式為二進位制而得名。狹義的二進位制檔案即指除文字檔案以外的檔案。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編...
文字檔案與二進位制檔案
什麼是文字檔案,什麼是二進位制檔案?在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有格式的,由可理解的ascii以及其他編碼文字組成的檔案都是文字檔案,如c原始檔,html超文字檔案,xml。除此之外的其他檔案都是二進位制檔案,如word檔案doc,影象格...