¿Hay algún problema al hacer un bucle de send()
donde "const void *buf
" (2do argumento) es un descriptor de archivo de un archivo abierto como modo binario (fopen("C:\example.mp3", "rb")
)?Envío de datos binarios
Respuesta
El argumento de send
debe señalar a la memoria intermedia, llenada con los valores (bytes) que desea enviar. Puede tratar el argumento const void *buf
de send() como const char *buf
- es solo una matriz de caracteres, que no será modificada por la función send().
Pero, fopen()
le devuelve un FILE*
- es un puntero a la estructura especial FILE
. Por lo tanto, si desea enviar el contenido del archivo, debe leer los contenidos en el búfer tmp
utilizando el fread()
función & FILE*
puntero, y luego alimentar el tmp
búfer a la función . Repita este código con fread()
& send()
hasta que llegue a un final de archivo.
Código de la muestra (que se encuentra en 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);
}
En Linux, también hay una llamada al sistema 'sendfile' que en realidad elimina el espacio del usuario y acelera mucho las cosas: http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2. html –
Verificaría el valor de retorno de 'send'. Puede devolver algún valor menor que 'len', en cuyo caso querrá volver a intentar con' tmp + r, len -r' donde 'r' es la cantidad de bytes enviados previamente. – asveikau
En Linux, hay una llamada al sistema 'empalme' que obsoleta' sendfile'. – user611775
- 1. Envío de datos binarios con el cliente de Restlet
- 2. El envío de datos binarios a través de http
- 3. envío de datos binarios a través de POST en android
- 4. Problema con Python retorcido: envío de datos binarios
- 5. Git y datos binarios
- 6. DbUnit y datos binarios
- 7. StreamReader y datos binarios
- 8. BlobBuilder arruina datos binarios
- 9. Datos binarios en MySQL
- 10. iPhone escribiendo datos binarios
- 11. cURL Datos binarios y datos de formulario
- 12. socket.io streaming de datos binarios
- 13. ¿Cómo interpretar datos binarios en C++?
- 14. Analizando datos binarios en C?
- 15. Perl y MongoDB datos binarios
- 16. Obteniendo datos binarios usando SqlDataReader
- 17. profiler mysql "Envío de datos"
- 18. Lectura de datos binarios de stdin
- 19. Cálculo de similitud de datos binarios
- 20. Mensajes de datos binarios de Websocket (ArrayBuffer)
- 21. ¿Transfiriendo datos binarios a través de un servicio web SOAP?
- 22. C++ String de STL para datos binarios
- 23. Publicación de datos binarios con curl
- 24. Lea los datos binarios de Console.In
- 25. Lectura de datos binarios sin reinterpret_cast
- 26. Buscar cadena de caracteres en datos binarios
- 27. ¿Cómo puedo enviar datos binarios de Sinatra?
- 28. almacenamiento de datos binarios en mysql
- 29. Análisis de datos binarios con scala
- 30. Python: Búsqueda/lectura de datos binarios
¿Quiere decir que desea enviar el contenido del archivo a través de la toma de corriente? Si es así, no debería haber ningún problema, pero debe leer los datos del archivo en un búfer, luego transmitir los datos en el búfer al zócalo. –