Ecco il mio codice:Qual è il modo corretto di leggere da un socket TCP in 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;
}
E 'un po' di C e C++ come si può dire. BUFFER_SIZE è 256 - dovrei semplicemente aumentare la dimensione? Se sì, cosa? Importa?
So che se "fine" non viene ricevuto per qualsiasi motivo, questo sarà un ciclo infinito, il che è negativo, quindi se si può suggerire un modo migliore, si prega di farlo anche.
Questo è semplice C++ ... –
Grazie per il vostro contributo. Si noti che il mio codice implementa il metodo read(), che può essere trovato nel sys/socket.h library, che è "parte della libreria GNU C" e non la libreria C++. –