Usando la programación de socket C/C++, y el método "read (socket, buffer, BUFSIZE)". ¿Qué es exactamente el "buffer" que sé que char y byte son la misma cosa, pero ¿importa cuántos elementos tiene la matriz de bytes? ¿El buffer necesita poder contener todo el mensaje hasta el carácter nulo?Cómo crear un búfer para leer datos de socket en C
Respuesta
BUFSIZE debe ser igual al tamaño de su búfer en bytes. read() dejará de leer cuando el buffer esté lleno. Aquí está un ejemplo:
#define MY_BUFFER_SIZE 1024
char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);
Gracias, pero eso solo responde mi pregunta parcialmente. Supongo que lo que busco es ¿qué sucede si la secuencia que se va a leer es más grande que el buffer? –
Heat Miser: Sigues leyendo hasta que read() devuelve 0. –
Disculpa, eso no estaba muy bien redactado. Quise decir: tienes que hacer tus lecturas en un ciclo. Cada vez que pasa por el bucle, procesa lo que hay en el búfer (aunque solo sea para agregar su contenido a una cadena). El ciclo termina cuando read() devuelve 0. –
Su aplicación enchufes no requiere de la memoria intermedia, para ser lo suficientemente grande, para contener el mensaje completo a ciencia cierta, pero podría ser conveniente dependiendo de, lo que está haciendo.
Como siempre, use sizeof
cuando tenga la oportunidad. Usando el operador incorporado sizeof
, le pide al compilador que calcule el tamaño de una variable, en lugar de especificarlo usted mismo. Esto reduce el riesgo de introducir errores cuando el tamaño de la variable real es diferente de lo que piensas.
Así, en lugar de hacer
#define BUFSIZE 1500
char buffer[BUFSIZE];
int n = read(sock, buffer, BUFSIZE);
que realmente debe utilizar
char buffer[1500];
int n = read(sock, buffer, sizeof buffer);
Note como usted no necesita paréntesis alrededor del argumento de sizeof, a menos que el argumento es el nombre de un tipo .
unwind: ¿eso es cierto en C o solo en C++? (Lo siento, solo estoy familiarizado con C/C). – benc
oye, disculpa por molestarte en una pregunta muy antigua. Me enfrento a un problema similar y estaría realmente feliz si pudieras darme tu opinión sobre lo que podría estar causando eso. ¡Por adelantado! Espero que no te importe. En caso, esta es la [pregunta] (http://stackoverflow.com/questions/12070203/image-stream-sent-over-socket-server-issue)! – Matteo
- 1. Leer desde el socket
- 2. C# métodos de rendimiento para recibir datos de un socket?
- 3. Leer datos sin búfer de la tubería en Perl
- 4. lector de búfer que no recibe datos del socket
- 5. ¿Cómo crear un socket Boost.Asio desde un socket nativo?
- 6. usando seleccionar para esperar datos en un socket de cliente
- 7. Cómo leer los bytes de un socket en Haskell
- 8. ¿puedo leer exactamente un paquete UDP de un socket?
- 9. Socket leer y escribir simultáneamente
- 10. En Ruby, ¿cómo leer UTF-8 desde un socket?
- 11. ¿cómo puedo leer datos binarios en C++?
- 12. ¿Cómo codigo un búfer circular entero simple en C/C++?
- 13. Cómo cancelar un socket en C#
- 14. ¿Cómo puedo crear un 'ostream' desde un socket?
- 15. leer datos de XLSX en C#
- 16. Cerrar correctamente un socket TCP
- 17. C++ read() - ing desde un socket a un ofstream
- 18. ¿Cómo usar el archivo PEM para crear un socket SSL en Java?
- 19. ¿Cuál es un buen tamaño de búfer para la programación de socket?
- 20. ¿Cuál es la forma correcta de leer desde un socket TCP en C/C++?
- 21. ¿Cómo crear un servidor UDP en C?
- 22. Cómo utilizar un generador para dividir datos de lectura de socket en líneas nuevas
- 23. cómo activar boost :: asio socket en C++/CLI .Net socket?
- 24. C: leer el archivo binario en la memoria, alterar el búfer, escribir el búfer en el archivo
- 25. Boost iostreams: ¿Cómo crear una secuencia TCP tamponada (para leer)?
- 26. ¿Cómo crear y leer estructuras dinámicamente en C?
- 27. BufferedInputStream en byte [] para enviar a través de un socket a una base de datos
- 28. StreamReader y búfer en C#
- 29. ¿Cómo obtener datos hacia/desde un socket en un hilo?
- 30. Cómo crear un socket RFCOMM inseguro en Android?
¿Este carácter nulo es enviado por el remitente de Tus mesasage? –
No, desafortunadamente debo agregarlo al final de la carga útil esperada –
¿Conoce el tamaño del mensaje, o el final marcado de alguna manera? –