套接字和队列问题

时间:2010-12-03 11:38:23

标签: c++ sockets 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);


    }

但问题是队列的大小不会增长它总是一样的,这就是我在屏幕上看到的

 0
    40
    40
    40
    40
    40
    ...

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

3 个答案:

答案 0 :(得分:1)

sizeof在编译时确定。你的意思可能是p.size()

答案 1 :(得分:0)

sizeof(p)不会返回队列中的元素数量!它是一个编译时构造,它返回CHARQUEUE类型占用的字节数:sizeof(p) 总是给你相同的结果。

您需要的是:

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

用另一个例子来说明这一点:const char *s = "Something";是一个指向空终止字符串的指针,而sizeof(s)(相当于sizeof(const char *))与实际长度无关字符串strlen(s)(在本例中为9)。

答案 2 :(得分:0)

另一个问题,除了sizeof / p.size()之外,p.push(recv_data)正在将recv_data缓冲区的地址推入队列,而不是数据本身