Aquí está mi código:¿Cuál es la forma correcta de leer desde un socket TCP en C/C++?
// Not all headers are relevant to the code snippet.
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
char *buffer;
stringstream readStream;
bool readData = true;
while (readData)
{
cout << "Receiving chunk... ";
// Read a bit at a time, eventually "end" string will be received.
bzero(buffer, BUFFER_SIZE);
int readResult = read(socketFileDescriptor, buffer, BUFFER_SIZE);
if (readResult < 0)
{
THROW_VIMRID_EX("Could not read from socket.");
}
// Concatenate the received data to the existing data.
readStream << buffer;
// Continue reading while end is not found.
readData = readStream.str().find("end;") == string::npos;
cout << "Done (length: " << readStream.str().length() << ")" << endl;
}
Es un poco de C y C++ como se puede ver. El BUFFER_SIZE es 256 - ¿debería simplemente aumentar el tamaño? Si es así, ¿qué? ¿Importa?
Sé que si "fin" no se recibe por alguna razón, este será un ciclo sin fin, lo cual es malo, por lo que si puede sugerir una mejor manera, hágalo también.
Esto es simple C++ ... –
Gracias por su contribución. Tenga en cuenta que mi código implementa el método read(), que se puede encontrar en el sys/socket.h biblioteca, que es "parte de la Biblioteca GNU C" y no la biblioteca C++. –