[Qt QUdpSocket] 짧은 시간동안 메시지 300개중 180여개만 받아지는데 왜 그런거죠?
글쓴이: daenno / 작성시간: 토, 2009/10/24 - 1:41오후
아래와 같은 내용을
Qt의 시그널/슬롯의 슬롯부분에서
278바이트 짜리 메시지를 짧은 시간 동안
한 꺼번에 300개를 받는다고 가정하면
180 ~200 여개 정도만 받아지는데
어디서 문제가 있는 건지 궁금합니다.
천천히 받거나 한 번에 20~30 개 정도는 받는데 문제가 없습니다.
(통신은 Udp 이며 쓰레드는 사용하지 않았습니다.)
void slotUdpFunc() { QByteArray readBlock; unsigned short int printData; int msgIDShift[2] = {0, 8}; int msgIDMask[2] = {0xff, 0xff}; while(udpSocket.hasPendingDatagrams()) { int size = udpSocket.pendingDatagramSize(); printf("The size of message received by HC : [%d]\n", size); readBlock.resize(size); udpSocket.readDatagram(recvData, sizeof(recvData)); msgFlag = processBit.ExtractMsg(recvData, printData, 6, 2, msgIDShift, msgIDMask); //MessageID diverMsg(msgFlag, recvData); printf("count is %d\n\n", ++count); } }
Forums:
정상아닐까요?
UDP 란게 원래 packet loss가 있을 수 있는 프로토콜인데, 많은 데이터를 주고 받을 때 일부 데이터를 못 받는 건 정상적인 동작인 것 같습니다.
테스트환경에서 UDP가
테스트환경에서 UDP가 로스되는 경우는 거의 보기 힘들지 않나싶어요
제 생각엔 소켓의 수신버퍼 크기 때문이라 짐작이 되네요
소켓 옵션을 설정할 수 있는 api를 살펴보시고 거기서 수신버퍼 사이즈를 늘려보세요
select() 같은걸 써서 받아보세요.
저도 시리얼 통신 할 때 비슷한 경우가 있었는데요.
그때 select() 써서 socket descriptor 입력 체크를 넣으니까 그런 증상이 없어지더라구요.
참고바랍니다.
행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?
댓글 달기