2014-07-18 8 views
1

Linux 데비안에서 Qt 4.8.2 (64 비트)를 사용하고 있습니다.QTcpSocket 상태가 올바르지 않습니다.

소켓 상태에 문제가 있습니다. 내가 서버에 연결하는 클라이언트입니다, 내 관련 코드입니다 : 내가 나에게 로컬 서버에 연결하고 내가 모두 연결 및 비 연결 상태를 테스트하는 이더넷 케이블을 분리 할 수 ​​

QTcpSocket *socket = new QTcpSocket(this); 
socket->connectToHost(interface[cameras[listnum].interface].ip,interface[cameras[listnum].interface].port); 
qDebug() << socket->waitForConnected(10000); 
qDebug() << socket->isValid(); 
qDebug() << socket->state(); 

. 케이블에 서버가 연결되어 있고 waitForConnected가 0.5 초 미만이고 케이블이 연결되어 있지 않으면 waitForConnected 시간이 10 초가되면 대기 시간으로 연결했는지 알 수 있습니다.

제 문제는 연결 상태가 동일한 지 여부입니다.

거짓

사실

QAbstractSocket ::

UnconnectedState 그리고 그것은 정말 연결 여부입니다 경우이 방법을 유지하십시오 qDebug의 출력이다. 연결되면 데이터를 보낼 수 있습니다. 또한 명령 단추에 마지막 두 문을 넣고 몇 초 또는 몇 분 후에도 반환 상태가 변경되지 않는다는 것을 확인했습니다.

나를 올바른 방향으로 안내하는 도움이 가장 감사 할 것입니다. 모든

답변

0

먼저, 소켓이 유효한지 확인에 아무 소용이 없다, 그것은 당신이 관심있는 상태입니다.

당신이 보여준대로 waitForConnected false를 반환, 당신은 확신 할 수 있습니다, 경우 state도 연결되어 있지 않습니다. 더 이상 확인할 점이 없습니다.

연결이 성공하면 waitForConnected이 true를 반환하고 state은 연결 상태를 반환해야합니다. state은 Qt 4.8.2 버젼 (4.8.5 또는 5.3.1에서 시도 할 수 없습니까?) 일지라도 남아있는 이벤트를 모두 소모 한 후에 만 ​​바뀔 수 있습니다.

나는 당신이 묘사하는 것이 실제로 일어난다는 것에 회의적이지만, 그렇게된다면 우리에게 먼저 설득해야 할 것입니다. 자체 포함 된 테스트 케이스 (단일 main.cpp 파일)를 작성하고 질문에 편집 한 다음 Qt 4.8.5에서 여전히 발생하는지 확인한 다음 버그 보고서를 제출하십시오.

+0

응답 해 주셔서 감사합니다. qDebug는 현재의 진단만을위한 것이며 최종 코드에는 포함되지 않을 것이며, 잘못된 상태를 보여줍니다. 코드의 다른 섹션에서이 소켓을 통해 데이터를 보내고 state()는 여전히 UnconnectedState를 반환합니다. 현재 프로젝트를 마쳐야하고 버그를 증명하기 위해 제안 할 작업을 수행 할 것입니다. waitForConnected의 타이밍 응답으로 해결을 한 다음 연결 상태에 대한 내 자신의 플래그를 설정하면 작동합니다. 다시 한번 감사드립니다. – user3854052

+0

적어도 Qt 4.8.5를 사용해보십시오. –

관련 문제