套接字编程c - 文件下载

时间:2013-10-03 02:40:59

标签: c sockets

我在c中创建一个套接字程序。它将文件中的数据分成多个块并通过套接字发送。目的地的数据以无序方式到达。我该如何管理呢。由于文件很大,我无法将所有数据保存在内存中直到最后。

2 个答案:

答案 0 :(得分:3)

在这种情况下我不熟悉标准方法,但是订购了afaik tcp。如果你坚持使用udp,你总是可以在每个块前面添加一个1字节(或更少)的块来指定顺序,然后使用它在客户端对它们进行排序。

答案 1 :(得分: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;
}

据推测,您有某种方案可以通过它知道每个插槽上有哪些块(即偏移量)。用它来计算文件中的正确偏移并写入它们。