QT qsocket 에서 UDP 기반 서버 구현 문제 입니다..
글쓴이: skah2lp2 / 작성시간: 월, 2004/09/20 - 10:25오후
.제가 글을 잘못 써서 그런지 제글에는 이상하게 답변이 하나두 안달리네요..
..QT의 소켓 으로 UDP 서버를 구현하고 있습니다..
클라이언트 쪽은 q소켓이 아닌 일반 소켓으로 unsigned short 형으로
76800 byte를 100개로 쪼개서 전송을 하고 있습니다..
..문제는 서버 쪽에서 일반소켓과 qt 를 적절하게 합치질 못해서..
GUI폼이 뻗어 버려서 어떤 버튼이벤트나 마우스 무스 조차 안된다는 것입니다.
그래서 서버는 Q소켓으로 구현하고있는 데.. 아래 다음 부분에서 문제가 생깁니다.
QByteArray datagram(socketDevice.byteAvilable());
socketDevice.readBlock(datagram.data(), datagram.size());
QDataStream in (datagram, IO_ReadOnly);
in.setVersion(5);
in>>변수명..
위에 다섯줄 가량을 분석 할수 없고...
제가 원하는 데이터형 unsigned short buffer[768] 배열에
받은 값들을 어떻게 넣느냐는 것입니다..
참고로 영상데이터 들입니다.
Forums:
바로위에 같은 질문이 있는데요 ^^
같은 내용인듯 한데요...
참고로, UI 먹통되는것은 qApplicaiton exec()함수내에서 message loop이 block 되어서 그렇습니다.
qApplicatinon 멤버함수인 processEvent()함수를 호출해서 해결을 할 수는 있으나, 님께서 올리신 다른 질문의 답변에서 그러했듯이 Thread 가 적당한 해결책이라 볼 수 있습니다.
http://www.korone.net QT 커뮤니티 사이트
QSocketDevice *s;QSocketNotifier *sn;
QSocketDevice *s;
QSocketNotifier *sn;
s = new QSocketDevice(QSocketDevice::Datagram);
s->bind(address, port);
sn = new QSocketNotifier(s->socket(), QSocketNotifier::Read);
connect(sn, SIGNAL(activated(int), SLOT(someslot(int)));
위에처럼 하시고 someslot() 에서 readblock()로 읽으면 됩니다..
ex) s->readBlock(buffer, size);
readBlock 의 함수 원형이 raeBlock( *char,size)
readBlock 의 함수 원형이 raeBlock( *char,size)
..캐릭터형 포인터를 받는데요.. 제가 받아야 할데이터는
unsigned short형입니다..
영상을뿌리는 소스가.. unsigned short형 배열에
맞춰 져 있기 때문에.. 이렇게 받게 되면..
영상을 뿌릴수가 없느데요..
어떻게 해결해야 하죠??..
캐스팅 하면 됩니다.
unsigned short형을 char* 형으로 casting하고
casting 된것을 다시 unsigned short 형으로 복원하면 됩니다.
http://www.korone.net QT 커뮤니티 사이트
댓글 달기