QTcpServer服务器无法监听和客户端连接不上问题

使用 QTcpServer ,使用 listen 函数监听局域网地址 (192.168.97.217)的时候,发现返回的结果为 false,无法监听,通过语句qDebug() << server->errorString(); 打印出的错误字串为

The proxy type is invalid for this operatoin;

但是,当我修改绑定的地址语句为 QHostAddress::LocalHost 之后,可以监听成功,现象如上所述。

经过研究,在 Qt 5.8 及以后,Qt 程序默认使用系统的代理设置会导致这个问题导致,只要关闭系统的代理设置就可以解决这个问题,关闭系统代理设置方法请访问以下网页

https://jingyan.baidu.com/article/0aa22375866c8988cc0d648c.html

关闭之后,通过 listen 函数就可以监听 127.0.0.1 和 192.168.x.x 两种地址了;如果不想修改系统代理设置,可以在QTcpServer 的构造函数中加入以下语句:

QNetworkProxyFactory::setUseSystemConfiguration(false); // 静态函数

(加入该句话之后,无论是Server监听还是Socket连接服务器,都变得异常快速,几乎没有等待延迟,不是很懂~)客户端也可加上上面的语句。

参考:https://www.cnblogs.com/hbrw/p/7728618.html

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt是一种流行的跨平台应用程序开发框架,其中包含了一些用于网络通信的类。其中之一就是QtQTcpServer类,它提供了一种简单的方式来创建一个TCP服务器。 使用QTcpServer类,我们可以方便地实现多个客户端连接服务器的功能。首先,我们需要创建一个QTcpServer对象,并调用其listen()函数来监听指定的IP地址和端口。当有客户端连接服务器时,QTcpServer会自动触发一个新的连接信号newConnection(),我们可以使用一个槽函数来处理这个信号。 在槽函数中,我们可以调用QTcpServer的nextPendingConnection()函数来获取新的连接,然后将其保存到一个QList或QVector中,以便于对它们进行管理。每个连接都代表一个与客户端的通信通道,我们可以通过调用QTcpSocket的相应函数来读取和写入数据。 为了处理多个客户端连接,我们可以使用Qt的事件循环机制。在每次循环中,我们可以遍历保存连接的列表,检查是否有新的数据可读取。我们可以使用QIODevice的readyRead()信号来实现这一功能,当有数据可读取时,我们可以调用QTcpSocket的相应函数来读取数据。 另外,我们还可以设置QTcpServer的maxPendingConnections属性来限制同时连接服务器客户端数量。当达到最大连接数时,后续的连接请求会被服务器忽略。 总的来说,使用QTcpServer实现多个客户端连接的功能相对简单,我们只需要注意管理连接对象和使用事件循环机制来处理数据即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值