我在c中創建套接字程序。它將文件中的數據分成多個塊並通過套接字發送。目的地的數據以亂序方式到達。我如何管理這個。由於文件很大,我無法將所有數據保存在內存中。套接字編程c - 文件下載
0
A
回答
0
提前創建一個稀疏文件,並在您進行時填寫它。你沒有指定什麼操作系統,但在這裏是一個如何在Linux中執行它的示例程序。
#define _BSD_SOURCE
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
int fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fd < 0)
{
perror("open");
return(1);
}
int offset = lseek(fd, 200000, SEEK_CUR);
ftruncate(fd, offset);
close(fd);
return 0;
}
大概你有某種方案,你知道哪個塊(即偏移量)進入每個套接字。用它來計算文件中的正確偏移並寫入它們。
3
我對這種情況下的標準方法不熟悉,但是afaik tcp是有序的。如果你堅持使用udp,你總是可以在每個塊上預先設置一個1字節(或更少)的塊來指定排序,然後使用它對客戶端進行排序。
+0
我正在使用TCP連接。是的...多個套接字從不同位置下載文件。所以他們必然會失序。無法弄清楚如何將數據保存在磁盤上,並最終按順序組合所有塊。 –
+0
例如從多個服務器下載單個文件?將塊的偏移量編碼爲第一個字或字節。然後你就知道該塊屬於哪個文件。如果你是客戶端,並且無法訪問服務器,那麼你可能會失敗。如果服務器不告訴你你得到了什麼,那麼你不能訂購你的數據。 –
相關問題
- 1. 在c編程的套接字編程
- 2. 套接字編程,C-java
- 3. C++/C使用berkeleys/bsd套接字從http下載文件
- 4. 套接字編程。 c#.net
- 5. C#套接字編程
- 6. C#套接字編程
- 7. 只有套接字下載文件
- 8. 失去連接後恢復文件上傳/下載(套接字編程)
- 9. 套接字編程 - C - 選擇連接
- 10. 套接字編程中的頭文件
- 11. 無法下載多個帶有套接字的文件C
- 12. recv()錯誤C/C++套接字編程
- 13. 下載HTTP通過套接字(C)
- 14. 套接字編程
- 15. 套接字超時套接字編程
- 16. 套接字編程
- 17. C++中的UDP套接字編程
- 18. Azure C#服務器套接字編程
- 19. 套接字編程
- 20. 新來的C#套接字編程
- 21. C中的Windows套接字編程
- 22. 套接字編程
- 23. C編程套接字緩衝區
- 24. 中斷通過套接字下載(recv)文件通過套接字
- 25. 亞馬遜EC2套接字編程(C)
- 26. C++中的套接字編程
- 27. C++網絡/套接字編程
- 28. PHP套接字編程
- 29. 異步套接字編程
- 30. TCP套接字編程
大概你正在使用多個套接字,每個大塊一個? – Duck
使用TCP不是UDP。如果你已經在使用TCP,你有一個普通的bug。 – ddyer
我正在使用TCP連接。是的...多個套接字從不同位置下載文件。所以他們必然會失序。無法弄清楚如何將數據保存在磁盤上,並最終按順序組合所有塊。 –