2014-09-25 8 views
1

Qt 애플리케이션을 개발 중이며 이상한 네트워크 문제를 경험하고 있습니다. 최종 사용자 관점에서 어떻게 보이는지 보여 드리겠습니다.TCP 청취 소켓이 생성되지 않았습니다.

[[email protected] server]$ telnet localhost 30004 
Trying ::1... 
telnet: connect to address ::1: Connection refused 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
Connection closed by foreign host. 

Netstat와 연결이 이제 설정되어 있는지 표시

[[email protected] server]$ sudo netstat -anp | grep 30004 
    tcp  0  0 0.0.0.0:30004    0.0.0.0:*     LISTEN  11113/./server 

가 그럼 난 텔넷 서버에 연결 :

먼저 나는 그것이 대상 포트에서 수신 있다는 내 서버를 시작하고 확인 . 지금까지는 아무 것도 없습니다 :

[[email protected] server]$ sudo netstat -anp | grep 30004 
tcp  0  0 0.0.0.0:30004    0.0.0.0:*     LISTEN  11113/./server 
tcp  0  0 127.0.0.1:30004    127.0.0.1:34608    ESTABLISHED 11113/./server 
tcp  0  0 127.0.0.1:34608    127.0.0.1:30004    ESTABLISHED 12657/telnet   

그런 다음 서버는 응용 프로그램 특정 시간 초과에 따라 연결을 끊습니다. 나는 다음 listenning 소켓이 파괴되어 있는지 확인 서버를 종료하고

[[email protected] server]$ sudo netstat -anp | grep 30004 
tcp  0  0 0.0.0.0:30004    0.0.0.0:*     LISTEN  11113/./server 
tcp  0  0 127.0.0.1:30004    127.0.0.1:34608    TIME_WAIT -     

: 그것은 순간에 10 초로 설정되어

[[email protected] server]$ sudo netstat -anp | grep 30004 
tcp  0  0 127.0.0.1:30004    127.0.0.1:34608    TIME_WAIT -     

마지막으로 내가 서버를 다시 시작하지만, 청취 포트는 더 이상 표시되지 않습니다 :

: 그 결과 클라이언트가 서버에 연결할 수 없습니다

[[email protected] server]$ sudo netstat -anp | grep 30004 
tcp  0  0 127.0.0.1:30004    127.0.0.1:34608    TIME_WAIT -     

으로

내가 뭘 잘못하고 있니? 이 문제는 구성 문제이며 응용 프로그램의 버그가 아니라고 생각합니다. 이 시나리오는 내 랩톱의 우분투에서 작동하는 것으로 보입니다. 앞서 언급 한 출력물은 리눅스 박스에서도 만들어졌다.

업데이트 :이 두 환경에서 다른 점은 qt 버전입니다. 내 노트북에는 4.8.6이 있고, 리눅스 박스에는 4.6.2입니다. 중요한지 확실하지 않습니다.

+0

서버 소켓을 연결/수신/수신하려고 할 때 코드가보고하는 오류는 무엇입니까? 서버 소켓에 SO_REUSEADDR 소켓 옵션을 설정하면 차이가 있습니까 ([QAbstractSocket :: ShareAddress] (http://qt-project.org/doc/qt-5/QAbstractSocket.html)를 BindMode로 사용하는 것과 같습니다. if Qt 소켓을 사용하고 있습니까?) 서버가 무엇이든 청취하고 있습니까 (netstat -apn | grep server 실행) – nos

+0

@nos, QTcpServer를 사용하고 있는데 listen 메소드에 대한 호출이 false를 반환한다는 것을 알 수 있습니다. QTcpServer에 대해이 옵션을 어떻게 활성화 할 수 있습니까? Afaik QTcpServer는이 옵션을 자동으로 설정합니다. 아니요, 아무것도 : [사용자 @ 호스트 서버] $ sudo netstat -anp | grep server 활성 인터넷 연결 (서버 및 확립) 활성 UNIX 도메인 소켓 (서버 및 확립) – krakovjak

+0

* nix에서 기본 것으로 보입니다. 따라서 listen()이 false를 반환하면 QAbstractSocket :: SocketError를 호출하고 그 내용을 확인하십시오. 어쨌든 코드를 게시해야합니다. – nos

답변

0

분명히 qt 라이브러리 버전에 문제가있었습니다. 우리는 최신 4.x.x로 업그레이드했고 이제는 문제가 해결 된 것 같습니다.