Что я должен использовать в качестве буфера в C ++ для получения данных из сетевых сокетов? - PullRequest
2 голосов
/ 10 августа 2010

Я использую сокеты с C ++.Программа просто запрашивает страницу HTTP, считывает ее в буфер buf[512], а затем отображает буфер.Однако страницы могут содержать больше данных, чем буфер, поэтому он будет обрезан, если не останется свободного места.Я могу увеличить размер буфера, но это не кажется хорошим решением.Это код, который я использую:

char buf[512];
int byte_count = recv(sockfd, buf, sizeof(buf), 0);

Какая альтернатива массиву символов в C ++ для использования в качестве буфера?

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Зависит от того, что вы собираетесь делать с данными.Если вы просто хотите выгрузить его в выходной поток, то вам нужно сделать то, что вы делаете, но делать это в цикле, пока не останется данных для чтения, записывая буфер в выходной поток послечитать.

1 голос
/ 10 августа 2010

Там, по сути, нет ни одного - при использовании recv вам нужно вызывать его несколько раз, пока он не прочитает все ваши входные данные. Конечно, вы можете использовать более продвинутые библиотеки сокетов, которые поддерживают растущие буферы, но для простой старой функции recv () вам понадобится массив n (или вектор char).

Конечно, вы можете добавить данные, которые вы прочитали, в динамический буфер, такой как строка:

string page;
while( len = recv( ... ) ) {
   page.append( buf, len );
}
...