使用Qt Network模块开发了一个UDP和TCP测试工具,client和server都写在一起,运行时先选择模式,其中TCP部分主要使用QTcpServer和QTcpSocket两个类,采用异步方式。开始是参考霍亚飞的《Qt Creator快速入门》,后来自己做了不少修改,现在对发现的问题做一下总结和思考。
代码地址:Github上的代码
Server部分
霍亚飞的书上的listen函数是
tcpServer->listen(QHostAddress::LocalHost,6666)
,但我用了之后报错: socket error 0 connection refused ,stackoverflow上说原始是win10的防火墙导致,IP还是要用本机的地址,修改之后正常了。霍亚飞的将tcpServer的
newConnection
信号与发送消息的槽相连。这个发送消息的功能,我试了试发现不能连续发送,里面用到了函数nextPendingConnection
,返回的是下一个连接,这种时候就该上Qt源码:
Q_D(QTcpServer);
if (d->pendingConnections.isEmpty()) // 没有pending连接,返回
return 0;
if (!d->socketEngine) {
qWarning("QTcpServer::nextPendingConnection() called while not listening");
} else