¿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. El envío de datos binarios a través de http
- 2. envío de datos binarios a través de POST en android
- 3. Envío de datos binarios con el cliente de Restlet
- 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. Mensajes de datos binarios de Websocket (ArrayBuffer)
- 19. Lectura de datos binarios de stdin
- 20. Cálculo de similitud de datos binarios
- 21. ¿Transfiriendo datos binarios a través de un servicio web SOAP?
- 22. Lectura de datos binarios sin reinterpret_cast
- 23. Análisis de datos binarios con scala
- 24. Buscar cadena de caracteres en datos binarios
- 25. almacenamiento de datos binarios en mysql
- 26. conversión rápida de datos binarios en Python
- 27. Python: Búsqueda/lectura de datos binarios
- 28. C++ String de STL para datos binarios
- 29. ¿Cómo puedo enviar datos binarios de Sinatra?
- 30. Lea los datos binarios de Console.In
¿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. –