【问题标题】:Socket read/write file size variation at sender and receiver发送方和接收方的套接字读/写文件大小变化
【发布时间】:2012-02-11 01:31:27
【问题描述】:

我想以相同大小的块发送数据。 但是如果文件大小不是夹头大小的倍数,那么将会增加额外的 接收端的尺寸。 我想到的解决方案是获取文件大小并根据文件大小划分块。 但是这个解决方案不起作用,任何人都可以告诉我

这是我的代码

total_chunks = size / CHUNK_SIZE;
partial_chunks = size % CHUNK_SIZE;
int write_fd = open("test3.txt",O_CREAT|O_WRONLY,0777);
if(fd != -1)
{
    if(total_chunks >= 1)
    {
        data_chunk = (char *)malloc(sizeof(char) * CHUNK_SIZE);
        bzero((char *) data_chunk, sizeof(data_chunk));
        for(iteration = 0;iteration <total_chunks;iteration++)
        {
            read(fd,data_chunk,sizeof(data_chunk));
            write(write_fd,data_chunk,CHUNK_SIZE);
        }
        free(data_chunk);
    }
    if(partial_chunks != 0)
    {
        data_chunk = (char *)malloc(sizeof(char) * partial_chunks);
        bzero((char *) data_chunk, sizeof(data_chunk));
        read(fd,data_chunk,sizeof(data_chunk));
        write(write_fd,data_chunk,sizeof(data_chunk));
    }
    close(fd);
    close(write_fd);
}

【问题讨论】:

    标签: sockets unix network-programming network-protocols


    【解决方案1】:

    sizeof(data_chunk) 会给出data_chunk 的数据类型的大小,它与sizeof(char *) 相同。没有函数可以为您提供 malloc 分配的内存块的大小,只需将其替换为 CHUNK_SIZE 而不是下面的完整块和部分块,即:

    total_chunks = size / CHUNK_SIZE;
    partial_chunks = size % CHUNK_SIZE;
    int write_fd = open("test3.txt",O_CREAT|O_WRONLY,0777);
    if(fd != -1)
    {
        if(total_chunks >= 1)
        {
            data_chunk = (char *)malloc(sizeof(char) * CHUNK_SIZE);
            for(iteration = 0;iteration <total_chunks;iteration++)
            {
                read(fd,data_chunk,CHUNK_SIZE);
                write(write_fd,data_chunk,CHUNK_SIZE);
            }
            free(data_chunk);
        }
        if(partial_chunks != 0)
        {
            data_chunk = (char *)malloc(sizeof(char) * partial_chunks);
            read(fd,data_chunk,partial_chunks);
            write(write_fd,data_chunk,partial_chunks);
        }
        close(fd);
        close(write_fd);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 2014-07-31
      • 2010-11-14
      • 2016-12-08
      • 1970-01-01
      • 2015-01-23
      • 2017-03-14
      • 2017-01-12
      相关资源
      最近更新 更多