缓冲区的套接字到队列问题

时间:2010-12-03 14:19:07

标签: c++ sockets networking queue

我有一些代码:

队列声明:

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);
}

但问题是我无法将数据复制到我的队列中,这是我想要的,我可以指向它...可以帮助这个吗?

有关更多信息,我的程序正在接收原始数据,这就是我使用char数组的原因.. 任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是你正在推送一个“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);