2010-12-03 63 views
0

我有一些代碼:緩衝區的插座來排隊問題

隊列的聲明:

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

但問題是,我不能將數據複製到我的隊列這就是我想要的,我可以只是點對它來說......任何一個人都可以幫忙嗎?

瞭解更多信息,我的程序接收的原始數據,這就是爲什麼我使用的字符數組.. 任何想法如何解決這一問題?

回答

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); 
+0

在這種情況下,它可能是值得做的檢查,以避免推空載體到隊列中。 – 2010-12-03 14:30:18