Отправка двоичных данных - PullRequest
6 голосов
/ 17 февраля 2011

Есть ли проблема при выполнении цикла send(), где "const void *buf" (2-й аргумент) - это файловый дескриптор файла, открытого в двоичном режиме (fopen("C:\example.mp3", "rb"))?

1 Ответ

5 голосов
/ 17 февраля 2011

Аргумент send должен указывать на буфер памяти, заполненный значениями (байтами), которые вы хотите отправить.Вы можете трактовать аргумент const void *buf функции send () как const char *buf - это просто массив символов, который не будет изменен функцией send ().

Но, fopen() возвращает вамFILE* - это указатель на специальную структуру FILE.Итак, если вы хотите отправить содержимое файла, вы должны прочитать содержимое в буфер tmp, используя функцию 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...