2016-02-29 251 views
1

我在使用QtNetwork连接计算机方面是全新的。网络简单网络连接的简单Qt代码

现在我只想看到一个连接的尝试。所以,我创建了一个GUI应用程序并在mainwindow.cpp我写这两个功能插槽,两个按钮:

void MainWindow::on_pbTalk_clicked(){ 
    QString IP = ui->leIP->text(); 
    ui->pteLog->appendPlainText("Now Talking to IP: " + IP); 
    talker = new Talker(); 
    talker->connectToHost(IP,25000); 
} 

void MainWindow::on_pbListen_clicked(){ 
    ui->pteLog->appendPlainText("Now listening on any port, I think"); 
    listener = new Listener(this); 
    if (!connect(listener, SIGNAL(newConnection()), this, SLOT(on_newConnections()))){ 
     ui->pteLog->appendPlainText("The connection of slot and signal failed!"); 
    } 
} 

现在发话本质上是一个与QTcpSocket没有什么重新实现了,只是还没有。

监听器是用下面的代码CON Listener.cpp一个QTcpServer既可:

Listener::Listener(QObject *parent) : 
    QTcpServer(parent) 
{ 

    qDebug() << "Listening on any port"; 
    listen(QHostAddress::Any); 

} 

void Listener::incomingConnection(int socketDescriptor){ 
    qDebug() << "New connection: " << socketDescriptor; 
} 

于是我运行同一程序的两个实例。一个在我的机器中。我运行该程序并按下Listen按钮(IP 10.255.255.101)。

第二个实例在虚拟机(IP 10.255.255.215)中运行,我运行程序并按下Talk按钮。这,据我所知应该试图打开一个连接到IP(这是10.255.255.101)在端口25000,我应该得到一个“新连接”消息在控制台。但是没有这样的消息出现。由于这不起作用,我没有继续前进。

任何人都可以告诉我我可能会做错什么吗?

回答

3

检查的QTcpServer::listen的documenation - 它说:

通知服务器侦听地址地址 和端口端口传入的连接。如果端口是0,则自动选择一个端口。如果 地址是QHostAddress :: Any,服务器将监听所有网络的接口 。

QHostAddress::Any表示您正在监听所有网络接口,而不监听端口。 (例如,如果你想只有一个本地服务器,您可以使用QHostAddress::LocalHost - 检查QHostAddress::SpecialAddress的更像是

如果你想手动设置端口,你必须调用:

listen(QHostAddress::Any, 25000); 

如果没有,你可以通过调用

quint16 port = serverPort(); 
+0

消息(我在控制台上写的文本)是错误的,没有意识到。并且因为我正在跟踪一个没有使用端口的例子....错误。它现在有效。我不喜欢阅读文档。非常感谢你。 – aarelovich

0

的“监听任何端口上的”成语不适用于你的使用得到自动选择端口;它不是UDP和TCP如何的意思是使用最有可能的。你不应该这样设计你的通讯e专用端口。

如果你想构建一个数据包嗅探器,你必须使用为此设计的平台特定的机制。有些库可以帮助你完成这个任务,其中最值得注意的是Windows上的WinPcap以及来自TcpDump项目的跨平台libpcap