проблема с сокетом и очередью - PullRequest
0 голосов
/ 03 декабря 2010

У меня есть код:

объявление очереди:

typedef deque<char*, allocator<char*> > CHARDEQUE;
typedef queue<char*,CHARDEQUE> CHARQUEUE;

CHARQUEUE p;
size_t size_q;
char recv_data[1024];

Я использую сокет udp для получения данных с удаленной машины:

этоцикл:

while (1)
{

        bytes_read = recvfrom(sock,recv_data,1024,0, (struct sockaddr *)&client_addr, &addr_len);

        p.push(recv_data);
        size_q=p.size();
        printf("%d\n",size_q);


    }

но проблема в том, что размер очереди не увеличивается, она всегда одинакова, это то, что я вижу на экране

 0
    40
    40
    40
    40
    40
    ...

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

Ответы [ 3 ]

1 голос
/ 03 декабря 2010

sizeof определяется во время компиляции. Вы, вероятно, имеете в виду что-то вроде p.size().

0 голосов
/ 03 декабря 2010

другая проблема, помимо sizeof / p.size (), заключается в том, что p.push (recv_data) помещает в буфер адрес буфера recv_data, а не сами данные

0 голосов
/ 03 декабря 2010

sizeof(p) не возвращает количество элементов в очереди! Это конструкция времени компиляции, которая возвращает количество байтов, занятое типом CHARQUEUE: sizeof(p) с всегда дает тот же результат.

Что вам нужно:

std::cout << p.size() << std::endl;

Просто чтобы проиллюстрировать это другим примером: const char *s = "Something"; - указатель на строку с нулевым символом в конце, а sizeof(s) (что эквивалентно sizeof(const char *)) не имеет никакого отношения к фактической длине строки strlen(s) (который в данном случае равен 9).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...