QTcpServer的小问题
照着网上以为大牛的blog用tcp协议写文件传输,遇到问题如下。
1,server端的newConnection的槽函数从未被触发。。。。。。。。,实际上QApplication对象已经建立。事件循环也在main函数开启,是在不懂为什么。
2,QtcpServer的listen(ipAddress,port)方法是只用调用一次就会一直监听,还是需要写在循环里面调用。当然这是异步的。。
3.如果用同步的方法写。waitforNewconnection()这个应该咋用呢?
分不多。。。大家帮忙解释下吧
[解决办法]
1) 我这是可以的,简单写了下,你试试
QRecv.h
#pragma once
#include <QtCore/QObject>
class QRecv :public QObject
{
Q_OBJECT
public:
QRecv();
~QRecv();
public slots:
void handle_connect();
};
QRecv.cpp
#include "QRecv.h"
#include <QtCore/QtDebug>
QRecv::QRecv()
{
}
QRecv::~QRecv()
{
}
void
QRecv::handle_connect()
{
qDebug()<<"handle_connect()"<<endl;
}
main.cpp
#include <QtGui/QApplication>
#include <QtNetwork/QTcpServer>
#include "QRecv.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTcpServer server;
if ( false == server.listen(QHostAddress::Any,5000))
{
return -1;
}
QRecv *recv = new QRecv;
QObject::connect(&server,SIGNAL(newConnection()),recv,SLOT(handle_connect()));
return a.exec();
}
编译运行后,netstat -an可以看到5000端口在监听。telnet 127.0.0.1 5000 访问TCP端口,可以看到事件触发
2) listen一次
3) bool QTcpServer::waitForNewConnection ( int msec = 0, bool * timedOut = 0 )
Waits for at most msec milliseconds or until an incoming connection is available. Returns true if a connection is available; otherwise returns false. If the operation timed out and timedOut is not 0, *timedOut will be set to true.