Я пишу небольшую сетевую программу на C ++. Среди прочего, он должен загрузить изображения профиля в Twitter У меня есть список (stl :: vector) URL-адресов. И я думаю, что моим следующим шагом будет создание цикла for и отправка GET-сообщений через сокет и сохранение изображений в разные png-файлы. Проблема в том, что когда я отправляю самое первое сообщение, получаю ответные сегменты и сохраняю png-данные, все кажется нормальным. Но прямо на следующей итерации то же сообщение, отправленное через тот же сокет, выдает 0 полученных байтов функцией recv (). Я решил проблему, добавив код создания сокета в тело цикла, но я немного запутался с концепциями сокетов. Похоже, что когда я отправляю сообщение, сокет должен быть закрыт и заново создан для отправки следующего сообщения на тот же сервер (чтобы получить следующее изображение). Это правильный способ сетевого программирования сокетов или возможно получить несколько HTTP-сообщений с ответами через один сокет?
Заранее спасибо.
UPD: вот код с циклом, в котором я создаю сокет.
// Get links from xml.
...
// Load images in cycle.
int i=0;
for (i=0; i<imageLinks.size(); i++)
{
// New socket is returned from serverConnect. Why do we need to create new at each iteration?
string srvAddr = "207.123.60.126";
int socketImg = serverConnect(srvAddr);
// Create a message.
...
string message = "GET " + relativePart;
message += " HTTP/1.1\r\n";
message += "Host: " + hostPart + "\r\n";
message += "\r\n";
// Send a message.
BufferArray tempImgBuffer = sendMessage(sockImg, message, false);
fstream pFile;
string name;
// Form the name.
...
pFile.open(name.c_str(), ios::app | ios::out | ios::in | ios::binary);
// Write the file contents.
...
pFile.close();
// Close the socket.
close(sockImg);
}