2010-12-03 2 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); 
} 

그러나 문제는 내가 원하는 큐에 데이터를 복사 할 수 없다는 것입니다. 어느 누구도이 일에 도움이 될 수 있습니까?

자세한 내용은 내 프로그램이 원시 데이터를 수신하는 이유입니다. 문자 배열을 사용하는 이유는 무엇입니까? 아이디어를 수정하는 방법은 무엇입니까?

답변

2

문제는 실제 데이터가 아니라 큐에 포인터 인 "char *"를 밀어 넣는 것입니다.

은 아래와하는 std::vector<char> 사용 (에러 체크 등 - 당신이 BTW해야한다.!) :

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

관련 문제