我是使用QtNetwork连接计算机的新手。
现在我想要的只是看到连接的尝试。所以我创建了一个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!");
}
}
现在Talker本质上是一个QTcpSocket,还没有重新实现。
Listener是一个QTcpServer,其代码如下:Listener.cpp:
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)中运行,我运行程序并按下“通话”按钮。据我所知,这应该尝试在端口25000处打开到IP的连接(即10.255.255.101),并且我应该在控制台中获得“新连接”消息。但是没有出现此类消息。由于这不起作用,我不会继续前进。
任何人都可以告诉我我可能做错了吗?
答案 0 :(得分:3)
检查QTcpServer::listen
的文件 - 它说:
告诉服务器侦听地址上的传入连接 和港口。如果port为0,则自动选择端口。如果 地址是QHostAddress :: Any,服务器将在所有网络上侦听 接口
QHostAddress::Any
表示您正在侦听所有网络接口,而不是端口。 (例如,如果您只想使用本地服务器,则可以使用QHostAddress::LocalHost
- 请查看QHostAddress::SpecialAddress以获取更多相似内容。
如果要手动设置端口,则必须调用:
listen(QHostAddress::Any, 25000);
如果没有,您可以通过调用
获取自动选择的端口quint16 port = serverPort();
答案 1 :(得分:0)