проблема с сокетом буфера в очереди - 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);
}

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

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

1 Ответ

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

Проблема в том, что вы нажимаете "char *", который является указателем в вашей очереди, а не фактическими данными!

Используйте std::vector<char>, как показано ниже (без проверки ошибок и т. Д., Которую выдолжен сделать кстати.!):

std::deque<std::vector<char> > p;


std::vector<char> read_buff;

// per loop iteration
read_buff.resize(1024);
// read
bytes_read = recvfrom(sock,&read_buff[0], 1024,0, (struct sockaddr *)&client_addr, &addr_len);
// now resize to contents
read_buff.resize(bytes_read);

// push this
p.push_back(read_buff);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...