2013-08-12 3 views
0

QTcpServer의 동기 연결 메커니즘을 사용하여 서버를 구현하려고했습니다. 내 코드는 매우 간단합니다. PFB.QTcpServer 동기 연결

////// 

MainScreen::MainScreen(QWidget *parent) : 
QMainWindow(parent), 
    ui(new Ui::MainScreen) 
{ 
    ui->setupUi(this); 
    server = new QTcpServer(); 

} 


int MainScreen::waitForConnection() 
{ 
    bool timeOut = 0; 

    if (server->listen(QHostAddress("192.168.70.30"), 10000)) 
    { 

     quint16 port = server->serverPort(); 
     qDebug() << "Server : "<< (server->serverAddress()).toString() << "Port : "<< port; 
     server->waitForNewConnection(-1, &timeOut); 
    } 

    return 0; 
} 
// 주

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainScreen w; 

    w.waitForConnection(); 

    return a.exec(); 

} 

그리고 리눅스 클라이언트 응용 프로그램 (C)에서 서버에 연결을 시도하고있다. 불행히도 내 서버에 아무런 연결이 없습니다. 동기 연결을 위해 다른 작업을해야합니까? 미리 감사드립니다

TCP -np에서 netstat

에서 netstat의

PFB 결과

활성 연결

프로토 로컬 주소 외국인 주소 주

TCP 127.0.0.1:62908 127.0.0.1:62909 설정 됨

TCP 127.0.0.1:62909 127.0.0.1:62908 ESTABLISHED

TCP 설립 192.168.70.89:62817 10.47.1.10:49224

TCP 192.168.70.89:62924 10.47.1.101:3128 설립

TCP 192.168.70.89:63209 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63213 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63264 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63265 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63266 10.47.1.11:8014 CLOSE_WAIT

TCP 192.168.70.89:63267 111.221.112.54:995 TIME_WAIT

TCP 127.0.0.1:62908 127.0.0.1:62909이

를 설립
+0

서버에 어떻게 연결을 시도합니까? 어떤 항구를 사용합니까? 서버는 "192.168.70.30"을 수신합니다. 하지만 임의의 포트에서. – Greenflow

+0

포트 '10000'을 통해 서버에 연결하려고합니다. – vraj010

+0

함대의 조언이 좋습니다. QHostAddress :: Any를 시도하십시오. 또는 127.0.0.1을 시도하고 로컬로 연결할 수 있는지 확인하십시오. 코드가 훌륭하고 잘 작동해야합니다. 네가 시도 할 때 컴퓨터가 실제로 192.168.70.30을 가졌을 것이라고 생각 하는가? netstat을 사용할 때 192.168.70.89 이었기 때문에. – Greenflow

답변

1

확인할 사항 :

  • 서버에서 실제로 들어오는 연결을 수신하고 있습니까? Windows의 경우 linux 또는 netstat -ta에서 netstat -lt를 실행하고 수신 상태에서 포트가 열려 있는지 확인하십시오.
  • 해당 주소에 문제가있는 경우 호스트의 특정 주소 대신 QHostAddress :: Any를 사용하십시오.

추가 : 수신 포트를 표시하도록 netstat -nap TCP 명령을 사용하여 Windows에서 netstat를 실행해야합니다. 그러나 네트워크 서버에 로컬로 연결할 수 있기 때문에 네트워크 서버가 작동 중임을 알 수 있습니다. 당신이 창문 아래에서 뛰고있는 것 같습니다. 그렇다면 윈도우의 방화벽을 비활성화하려고 했습니까? 바이러스 백신을 실행중인 경우 시스템 외부에서 연결을 차단하는 경우에도 해당 바이러스 백신을 사용하지 않도록 설정하십시오. 마지막으로, 기계가 ping을 통해 서로를 볼 수 있는지 확인하십시오.

+0

나는 netstat 결과를 추가했다 .... 나는 나의 포트를 찾을 수 없었다. 그리고 성공하지 않고 QHostAddress :: Any로 시도했습니다. – vraj010