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