Форум: Форум C++Разное
Новые темы: 00
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Socket получение ответа
 
 автор: hell_riser   (15.07.2009 в 14:08)   письмо автору
 
 

Доброго времени суток.
Помогите пожалуйста разобраться с получением ответа от сервера

int Pop3::MessageCount()
{
        char command[] = "LIST\r\n";
        char buf[8192];
        int result, i;

        if(!Loggedin)
        {
                return -1;
        }
        Sock->Send(command, strlen(command));
        result = Sock->Recv((char*) &buf, sizeof(buf));
        if(result == SOCKET_ERROR || result == 0)
                return -1;
        if(Response)
        {
                delete [] Response;
                Response = new char[sizeof(buf)];
        }
        for(i=0; i<result; i++)
        {
                Response = buf;
        }
        printf("%s\n", Response);
        return 0;
}

в результате получаю только первую строку ответа "+OK Logged in", как получить полностью весь ответ?
P.S. пишу в ИСР Borland C++ builder 6.
P.P.S. На текущий момент это тестовое консольное приложение

  Ответить  
 
 автор: GeorgeIV   (15.07.2009 в 18:38)   письмо автору
 
   для: hell_riser   (15.07.2009 в 14:08)
 

for(i=0; i<result; i++)
        {
                Response = buf;
        }

А что делает этот цикл?

  Ответить  
 
 автор: hell_riser   (15.07.2009 в 19:00)   письмо автору
 
   для: GeorgeIV   (15.07.2009 в 18:38)
 

да, собственно бессмысленный кусок кода оставшийся от предыдущих попыток ...
уже туго соображаю, вроде было что-то типа

string str ="";
for(i=0: i<result; i++)
{
    str +=buf[i];
}

пытался в строку загонять по символьно содержание буфера, результат тот-же

p.s. вроде бы нашел выход:

int Pop3::MessageCount()
{
        char command[] = "LIST\r\n";
        char buf[8192];
        string Response;
        int result;

        if(!Loggedin)
        {
                return -1;
        }
        Sock->Send(command, strlen(command));
        do
        {
                result = Sock->Recv((char*)&buf, sizeof(buf));
                Response = buf;
                cout << Response;
        }
        while(result > 0);
        return 0;
}

но теперь выполнение программы останавливается после вызова данного метода
прогнал в дебагере пошагово, останов происходит в

int Socket::Recv(char* buffer, int length)
{
return recv(Sock, buffer, length, 0);
}

подскажите пожалуйста где ошибка, а то, голова уже пухнет :(

P.S. всё разобрался.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования