Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение списка из сокета, бага 
V
    Опции темы
dgolukas
  Дата 16.4.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



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

зависает на втором прохождении цикла. в чем может быть ошибка?????

Код

int Socket::Read(std::list<CString> &data, int size)
{
    int result;
    for (int i=0; i< size; i++)
    {
        char* buffer = new char[size];        
        result = ::recv(m_socket,buffer, size, 0);
        data.push_back(buffer);
        if(result == -1)
       {
           ::closesocket(m_socket);
                       int result = ::GetLastError();
       }
       delete [] buffer;
    }
    return result;
}

PM MAIL   Вверх
azesmcar
Дата 16.4.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(dgolukas @  16.4.2010,  16:14 Найти цитируемый пост)
зависает на втором прохождении цикла. в чем может быть ошибка?????

Может просто данные закончились а сокет блокирующий. И зачем нужно на каждом шагу заново выделять память, причем того же размера? Личная неприязнь к скорости? smile 
PM   Вверх
Alca
Дата 16.4.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Может так?
Код

//--------------------------------------------------------------------------- 
//TODO: + sRecvBytes (принимаем данные из буфера сокета)
std::string CXSocket::sRecvAll(INT iFlags) {
    std::string  sRes                    = "";
    BOOL         bRes                    = FALSE;
    
    const size_t cuiBuffSize             = 1024;
    CHAR         szBuff[cuiBuffSize + 1] = {0};

    for (;;) {
        ULONG ulArg = (ULONG)FALSE;    
        if (0 != ::ioctlsocket(_m_puiSocket, FIONREAD, &ulArg)) {
            break;
        }
        
        if (0 == ulArg) {
            break;
        }

        if (cuiBuffSize < ulArg) {
            ulArg = cuiBuffSize;
        }

        INT iRes = ::recv(_m_puiSocket, szBuff, ulArg, 0);
        if (iRes <= 0) {
            break;
        }

        sRes.append(std::string(szBuff, iRes));
    }

    return sRes;
} 


Это сообщение отредактировал(а) Alca - 16.4.2010, 16:33


--------------------
PM WWW ICQ Skype Jabber   Вверх
boostcoder
Дата 16.4.2010, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



изврат, имхо.
сериализуй структуру, и не мучай моцг.
PM WWW   Вверх
dgolukas
Дата 16.4.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



решение было найдено чтением литературы)
просто переделала протокол, в который пакуется список в разобранном состоянии  и пишется уже одним массивом просто чаров,через индексы))

всем спасибо)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.