使QTcpServer只接受IPv4连接
Make QTcpServer accept only IPv4 connections
我正在实现一个FTP服务器,它还不支持IPv6 (IPv6连接不能使用PORT和PASV,他们需要使用EPRT和EPSV来指定数据连接)。
所以我需要从我的QTcpServer只接受IPv4连接。现在我用下面的代码开始监听:
server->listen(QHostAddress::Any, port);
QHostAddress::Any应该是IPv4的任意地址,但是当我指定localhost而不是127.0.0.1时,Filezilla仍然管理使用IPv6连接。我认为QHostAddress::Any意味着只接受IPv4的传入连接,但显然不是这样。
如何禁用IPv6连接?
在Qt4中,QHostAddress::Any
只监听IPv4,但从Qt5开始,它现在监听所有可用的接口。
如果您想在Qt4和Qt5下编译,您的代码应该是这样的:
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
server->listen(QHostAddress::AnyIPv4, port);
#else
server->listen(QHostAddress::Any, port);
#endif
正如Qt5参考所说:
QHostAddress::Any双栈Any -address。与此绑定的套接字address将同时监听IPv4和IPv6接口。
基于QTcpServer引用,您应该使用
QHostAddress::AnyIPv4
QHostAddress::AnyIPv4 IPv4任意地址。相当于QHostAddress("0.0.0.0")。绑定此地址的套接字将监听
注:它在底层做的是创建正确版本的套接字,即AF_INET
或AF_INET6
:
int ipv4sockfd = socket( AF_INET, SOCK_STREAM, 0);
int ipv6sockfd = socket( AF_INET6, SOCK_STREAM, 0);
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 使IPv6或IPv4的连接变得容易
- 使QTcpServer只接受IPv4连接
- 使用Boost.Asio在单个端口上接受IPv4和IPv6连接
- 正在连接IPv4客户端到IPv6服务器:连接拒绝
- c++ winsock连接IPv4地址时被拒绝