【问题标题】:Remove first words from file从文件中删除第一个单词
【发布时间】:2013-10-10 13:57:28
【问题描述】:

对不起,如果这是一个愚蠢的问题,但我对 C 有点缺乏经验。我正在尝试创建一个简单的 TCP 客户端/服务器连接。它是这样工作的:服务器存储多个文件,包括 .txt 和 .jpg。当客户端需要其中一个时,他将文件名发送到服务器,读取并写入到某个位置。

一切正常,除了服务器的响应是 "RES status size data" 。我只对创建新文件的 data 感兴趣,但我无法拒绝将 RES status size 写入输出文件。我尝试使用 strtok 但因为它而出现段错误,不知道为什么。这是我从服务器接收响应并开始将其写入新文件 fp 的代码部分。

while(success == 0)
    {
        while(f_block_sz = recvfrom(fd2, buffer, sizeof(buffer), 0, (struct sockaddr*)&serveraddr2, &addrlen))
        {


            if(f_block_sz < 0)
            {
                printf("Receive file error.\n");
                break;
            }
            int write_sz = fwrite(buffer, sizeof(char), f_block_sz, fp);
            if(write_sz < f_block_sz)
            {
                printf("File write failed.\n");
                break;
            }
            bzero(buffer, LENGTH);
        }

        printf("ok!\n");
        success = 1;
        fclose(fp);
    }

我什至不知道什么是最好的。我应该在写入新文件之前删除那些“无用”的词,还是应该在文件完成后编辑文件?

提前致谢。

【问题讨论】:

    标签: c tcp tcpclient


    【解决方案1】:

    我不确定,但我只是想如果您的“RES 状态大小”是固定大小的,比如“x”字节,那么在写入输出文件时只需跳过 x 字节的接收数据......

    int write_sz = fwrite(buffer + x, sizeof(char), f_block_sz, fp);
    

    我不确定这是一个好的做法,甚至是正确的,我只是考虑了一下。

    【讨论】:

    • 嗯,很有趣。谢谢!甚至没有想到这一点。不幸的是,大小可以是从 1 到 23000 之类的任何值。有没有办法读取第三个“”之前的字符数?
    • 没错。我现在正在考虑做这样的事情:for(g=1; ; g++){ fscanf(fp+7,"%c",&amp;c); if(c==' ') return g; else fp++; } 这可能是错误的,但我想你明白了。我想在“RES ok”之后开始检查字符串,当我到达“空格”时,我会有数据的开头。然后我会将 x 替换为 g 的值。我这样想对吗?
    • 好吧,如果大小是一个变量,我认为你需要将接收到的缓冲区复制到另一个缓冲区,跳过所有字符直到第三个“”(空格),然后将缓冲区写入输出文件。
    • yap ...据我所见或认为您的想法是正确的,但请稍等,有人可能会给出更好的答案。我对 c 也是一种新手。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多