我在從客戶端發送文件到服務器時遇到問題。當我發送文本文件時,它沒問題。但是,當我嘗試發送二進制文件時,我只收到文件的一部分或應用程序崩潰。我喜歡一些代碼,對於二進制轉換工作正常。我使用WinSock,我有SOCKET
指向服務器,SOCKET
指向客戶端。我已經嘗試了幾乎所有的東西,請幫助一下。
Thanx任何答覆。編輯: 我沒有任何資料來源。我需要幫助發送exe文件的變化比sendig txt中的變化。轉換?我打開它作爲bin,但它沒有幫助。編輯2: @thkala: 這是非常具體的。我想我做了所有3個可能的錯誤,我用getline()並終止在0字節,所以可能是這樣。如果不是getline(),要使用什麼?我打開任何liblary使用文件,我現在使用fstream。C++文件傳輸
Q
C++文件傳輸
-6
A
回答
2
文本和二進制文件之間的一些差異顯著,可能會或可能不會發覺你:
文本文件通常具有線,通過行結束符分隔。對二進制文件使用面向行的函數可能會以各種有趣的方式失敗。
作爲前一點的後續,有不保證二進制文件將永遠包含甚至單個行終止符。這種差異往往會破壞那些不知不覺地假定一行不能超過X個字符的代碼,然後在整個輸入之前繼續根據該假設分配內存。無論X有多大,總會有一個更大的文件。順便說一句,這樣的代碼通常也會在機器生成的文本文件中出現很長的行。
通常假定文本文件不包含零字節,而二進制文件通常是這樣做的。由於零字節是C風格字符串的終止指示符,因此在通過面向文本的函數進行處理時,二進制內容往往會被破壞。即使各種函數的寬字符版本也會中斷,因爲它們只在特定位置期望零字節。
除非您發佈了一些代碼,否則不可能提供比此更具體的幫助。
0
使用fread()
,ReadFile()
或類似的函數從文件讀取數據塊到內存緩衝區,通過套接字緩衝區,然後根據需要重複,直到整個文件被讀取。如果您不介意使用特定於Microsoft的功能,則可以選擇使用CreateFile()
打開該文件,然後使用TransmitFile()
讓WinSock通過套接字將文件發送給您,這樣您就不必手動讀取該文件。
相關問題
- 1. 傳輸文件C
- 2. 文件傳輸C++
- 3. C#:控制文件傳輸*
- 4. 文件傳輸在C#
- 5. P2P文件傳輸c#
- 6. 使用c#傳輸文件
- 7. FTP文件傳輸C#
- 8. C文件傳輸問題
- 9. C++ Builder - 文件傳輸
- 10. c socket文件傳輸
- 11. C++ ofstream與C++ cout傳輸到文件
- 12. 文件傳輸
- 13. 文件傳輸
- 14. 通過套接字傳輸文件c
- 15. C#文件傳輸通過套接字
- 16. C#停止TCP文件傳輸
- 17. C#異步套接字文件傳輸
- 18. 在c#中使用Ymodem文件傳輸#
- 19. C++ - 可執行文件的傳輸
- 20. C#中用於文件傳輸的PuTTY
- 21. 如何取消TCP文件傳輸c#
- 22. 使用socket_stream jpg文件傳輸C
- 23. 傳輸結果到txt文件C
- 24. 傳輸文件流
- 25. Android,文件傳輸
- 26. Python文件傳輸
- 27. B2B文件傳輸
- 28. Zend文件傳輸
- 29. 文件傳輸/ WCF
- 30. 文件傳輸RMI
社區可以幫助您調試代碼(如果您提供的話)。如果你只是在尋找代碼搜索谷歌,你會發現很多。 – Boundless
請張貼一些代碼,以便其他人可以提出修復建議。如果您有傳輸文本文件的代碼,那麼也許我們可以發現阻止您發送二進制文件的問題。 – dasblinkenlight
嘗試在發送完所有內容後清空緩衝區。 – Kevin