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입니다. 중요한지 확실하지 않습니다.
서버 소켓을 연결/수신/수신하려고 할 때 코드가보고하는 오류는 무엇입니까? 서버 소켓에 SO_REUSEADDR 소켓 옵션을 설정하면 차이가 있습니까 ([QAbstractSocket :: ShareAddress] (http://qt-project.org/doc/qt-5/QAbstractSocket.html)를 BindMode로 사용하는 것과 같습니다. if Qt 소켓을 사용하고 있습니까?) 서버가 무엇이든 청취하고 있습니까 (netstat -apn | grep server 실행) – nos
@nos, QTcpServer를 사용하고 있는데 listen 메소드에 대한 호출이 false를 반환한다는 것을 알 수 있습니다. QTcpServer에 대해이 옵션을 어떻게 활성화 할 수 있습니까? Afaik QTcpServer는이 옵션을 자동으로 설정합니다. 아니요, 아무것도 : [사용자 @ 호스트 서버] $ sudo netstat -anp | grep server 활성 인터넷 연결 (서버 및 확립) 활성 UNIX 도메인 소켓 (서버 및 확립) – krakovjak
* nix에서 기본 것으로 보입니다. 따라서 listen()이 false를 반환하면 QAbstractSocket :: SocketError를 호출하고 그 내용을 확인하십시오. 어쨌든 코드를 게시해야합니다. – nos