发送二进制数据

时间:2011-02-17 01:27:36

标签: c sockets binary

执行send()的循环是否有任何问题,其中“const void *buf”(第二个参数)是以二进制模式(fopen("C:\example.mp3", "rb"))打开的文件的文件描述符?

1 个答案:

答案 0 :(得分:5)

send的参数必须指向内存缓冲区,填充了要发送的值(字节)。您可以将send()的参数const void *buf视为const char *buf - 它只是字符数组,不会被send()函数更改。

但是,fopen()会向您返回FILE* - 它是指向特殊结构FILE的指针。因此,如果要发送文件的内容,则应使用tmp函数& amp;读取内容到fread()缓冲区。 FILE*指针,然后将tmp缓冲区提供给send()函数。使用fread()&重复此代码send()直到您到达文件结尾。

示例代码(位于http://developerweb.net/viewtopic.php?pid=28854

int file2socket (FILE *fp, int sockfd)
{
    char tmp[8*1024];
    int len;
    int ret;

    for (ret = 0;;) {
        len = fread (tmp, 1, sizeof (tmp), fp);
        if (len == 0) {
            ret = feof (fp);
            break;
        }
        if (!send (sockfd, tmp, len, 0)) break;
    }

    return (ret);
}