QTCPSocket 관련 질문입니다.
글쓴이: chobozzang / 작성시간: 월, 2013/11/25 - 2:05오후
안녕하세요. QTcpSocket 을 테스트하고 있는데요... 한 쓰레드에서 쓰기와 읽기를 동시에 하려고 하니 문제가 생깁니다.
최초 접속을 하면 2개의 패킷을 서버쪽에서 내려주는데 쓰는 도중에 패킷이 누락되는 듯 합니다. 쓰는 부분을 주석처리하면 로그가 제대로 찍히는 데요. 주석을 풀게되면 1패킷의 로그가 누락되어집니다 ㅠㅠ. 서버모듈이 잘못되었나 wireshark를 이용해 찍어보니 패킷은 정확히 들어오구요... 다만 QT 쪽 client에서 패킷을 제대로 못읽어 오는 것 같아서요. 이 부분을 어떻게 해야할 지요 ㅠㅠ 혹시 제 소스코드에 문제가 있는지 문제점 지적 및 같은 증상을 겪으신 분은 답변 좀 부탁드리겠습니다.
관련 소스코드입니다. 쓸때는 데이터를 deque 에 넣어줘서 queue에서 하나씩 뺴서 쓰레드에서 처리하는 방식입니다. 처리하는 걸 확인할 떄는 qDebug() 를 이용해 print 하고 있습니다.
void sockThread::run()
{
//qDebug() << "sockThread thread start";
QTcpSocket cli;
cli.connectToHost(ip, port);
if(!cli.waitForConnected(100000))
{
qDebug() << "Error: " << cli.errorString();
return;
}
while(!stopped)
{
size = 0;
if(cli.waitForReadyRead(10000))
{
size = cli.read(buff, MAXLEN);
if(size > 0)
dist_packet(buff, size);
}
/*
if(!send_queue.empty())
{
SendHeader s_header;
memset(&s_header, 0, sizeof(SendHeader));
char* temp_write = (char*)&s_header;
w_mutex.lock();
s_header = send_queue.front();
send_queue.pop_front();
w_mutex.unlock();
sleep(1);
qDebug() << "write something" << s_header.cmd;
cli.write(temp_write);
}
*/
}
cli.disconnectFromHost();
if(cli.waitForDisconnected(1000))
{
qDebug() << __func__ << " Disconnected!!";
}
}Forums:


sleep(1)이 1 초 기다리는 건가요? Qt에서는
sleep(1)이 1 초 기다리는 건가요?
Qt에서는 아마 delay 였던 것 같은데 ... 지연을 줄 필요가 있나요?
지연을 주석처리하고 해 보세요.
ㅁㄴ
sleep 을 지우고해도 똑같은 현상이 발생하네요 ㅠㅠ wireshark에서는 패킷이 들어오는 게 찍힙니다... 서버쪽에서 term을 두지않고 막 쏘니 쓰는 부분을 주석처리해도 제대로 처리가 안되는 듯 합니다...
gilgil.net
size 값을 확인해 보세요.
www.gilgil.net
d
감사합니다. 초보자라 엄한곳 뒤지고 있었네요... tcp 통신에 대해서 잘 몰라서 1번 send 한 데이터는 receive 할 때 나눠져서 들어오는 줄 알았는데 붙어서도 들어오는군요... 덕분에 해결했습니다.
댓글 달기