2010-12-03 12 views
0

をキューイングしますループ:バッファのソケットは、私はいくつかのコードを持っている問題

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

が、問題は、私は私が欲しいものである私のキューにデータをコピーすることはできませんということです、私はちょうどPOINができこれに誰かが助けてくれる?

詳細については、私のプログラムは生データを受信して​​いるので、私はchar配列を使用しています。 これを修正する方法はありますか?

答えて

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

を、それがキューに空のベクトルを押す回避するためのチェックをやって、おそらく価値があるこの場合。 –

+0

キューをデキューする代わりにキューを使用できますか?それらの違いを教えてください。 – fsidiosidi

+0

'std :: queue'は別の型のコンテナを囲むラッパーで、デフォルトでは' std :: deque'です。選択肢があれば、 'std :: deque'を直接使用しますが、これは私の好みです... – Nim

関連する問題