2010-12-03 5 views
0

좀 코드가 루프 :이 내가 t에 표시되는 내용 소켓 및 큐 문제

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


    } 

하지만 문제는 큐의 크기는 항상 동일합니다 성장 doesen't 것을입니다

그는 화면에 대한 자세한 내용은

0 
    40 
    40 
    40 
    40 
    40 
    ... 

, 내 프로그램은 어떻게이 문제를 해결하는 .. 내가 문자 배열을 사용하는 이유입니다, 어떤 아이디어를 원시 데이터를 수신?

+0

당신은 같은 포인터를 추진하고있어 대기열에 들어가면 가리키는 데이터를 누르지 않습니다. – dreamlax

+0

이것은 내가 대기열에 데이터를 복사하고 있다고 생각합니다 ... 어떻게하지 않으면 어떻게 할 수 있다고 생각합니까? 도움을 주시면 감사하겠습니다. – fsidiosidi

답변

1

sizeof은 컴파일 타임에 결정됩니다. 아마도 p.size()과 같은 것을 의미 할 것입니다.

0

sizeof(p) 대기열의 요소 수를 반환하지 않습니다! CHARQUEUE 유형이 차지하는 바이트 수를 반환하는 컴파일 시간 구문입니다. sizeof(p)항상은 동일한 결과를 제공합니다.

당신이 필요로하는 것은 :

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

그냥 또 다른 예와이를 설명하기 위해 : const char *s = "Something";이 (sizeof(const char *)에 해당합니다) 실제와는 아무 상관이없는 널 종료 문자열에 대한 포인터 및 sizeof(s)입니다 길이는 문자열 strlen(s) (이 경우 9)입니다.

+0

맞아, 맞아. 내가주의를 기울이지 않았어. 정말 고마워. – fsidiosidi

0

또 다른 문제는, sizeof의/P.SIZE 외에() 일 (recv_data)이 대기열에 recv_data 버퍼의 주소를 추진하고 그 p.push이다 아닌 데이터 자체

+0

어떻게 그걸 할 수 있니? 제발 도와주세요. – fsidiosidi