- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 QUdpSocket 上收到了两次数据报,即使我在 wireshark 上观看并且只收到一次。我创建套接字并在端口 11112 上监听。还有另一个设备在我正在监听的这个端口上发出数据。对于发送的每条实际消息,我始终会收到两条消息。我不确定是什么原因造成的。有什么想法吗?
精简代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_socket = new QUdpSocket(this);
connect (m_socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChange(QAbstractSocket::SocketState)));
m_socket->bind(11112, QUdpSocket::ShareAddress);
}
MainWindow::~MainWindow()
{
delete ui;
delete m_socket;
}
void MainWindow::readPendingDatagrams()
{
QByteArray buffer;
QHostAddress sender;
quint16 port;
while(m_socket->hasPendingDatagrams())
{
int s = m_socket->pendingDatagramSize();
buffer.resize(s);
//for some reason there are two datagrams on the line.
// I have verified with wireshark that there is only one from the
// sender so not sure what is happening under the hood...
m_socket->readDatagram(buffer.data(),buffer.size(),&sender, &port);
QString source = sender.toString().split(":")[3];
if (source == "172.20.23.86")
{
qInfo() << buffer <<endl;
}
}
}
void MainWindow::onSocketStateChange(QAbstractSocket::SocketState state)
{
if ( state == QAbstractSocket::BoundState ) {
connect(m_socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}
}
最佳答案
如果数据报被发送到广播地址,并且您绑定(bind)到所有接口(interface) (0.0.0.0),并且有两个接口(interface)接收数据报,则可能会发生这种情况。要排除这种可能性,请切换到 receiveDatagram
API 并转储您收到的数据报的完整详细信息。我敢打赌,您收到它的界面每次都会不同。
您还可能多次连接 readPendingDatagrams
插槽,因此它可能会被触发多次,尽管 hasPendingDatagrams
应该返回 false
第二次 - 所以虽然这可能不是问题,但它是您必须解决的问题。它应该只连接一次 - 当您构造套接字时,即在构造函数中。
关于c++ - QUdpSocket - 数据报被接收两次,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106863/
我通过 udp 拆分帧 (50Kb) 并将 frameId 添加到数据中,将未打包的图像 (bmp) 数据从一个应用程序 (unity) 发送到另一个应用程序 (QT)。另一方面,我正在尝试集成帧(使
各位! 我在使用 QUdpSocket 和 readyRead 信号时遇到一个奇怪的问题,我可以说它没有像我想的那样工作, 我创建了一个 QUdpSocket 并将其绑定(bind)到某个端口,将 r
如果我在从客户端到服务器的 udp 套接字(在我的例子中是 QUdpSocket)上连续写入 2 次,我是否可能只收到一个数据报,其中包含我从客户端写入的两个数据?或者我确定我总是会得到 2 个单独的
我有一个使用 QUdpSocket 的服务器程序。 如何找到发件人的 IP 地址? 最佳答案 来自 http://doc.qt.io/archives/4.6/qudpsocket.html#read
我对 QUdpSocket 有疑问。我想创建一个简单的程序来使用 UDP 协议(protocol)发送和接收数据。我已经阅读了许多类似的主题,但我没有找到解决的方法。通信仅适用于 QHostAdres
我正在尝试编写一个小型 UDP 服务器应用程序。 我有一个客户端传输到这个应用程序套接字,我已经使用一个小的 UDP 回显程序(它将端口上接收到的数据回显到屏幕上)验证了它发送正常,而且,我可以看到在
我正在使用 Qt5,我正在尝试通过 QUdpProtocol 在 QDataStream 中使用 QByteArray 数据包发送 QPixmap。发送像素图很简单(并且正确?): QByteArra
我正在尝试使用 QUdpSocket 发送数据报。以下是我使用的代码: udpSocket = new QUdpSocket(this); QByteArray datagram = "Message
我在 QUdpSocket 上收到了两次数据报,即使我在 wireshark 上观看并且只收到一次。我创建套接字并在端口 11112 上监听。还有另一个设备在我正在监听的这个端口上发出数据。对于发送的
我正在编写一个使用 QUdpSockets 的应用程序。由于使用 operator new 创建套接字导致内存出现问题,我想知道是否有必要在关闭后删除它们。 代码如下: socket = new QU
假设我有一个直接连接到互联网的服务器和一个连接到路由器的客户端。客户端可以向服务器发送消息,因为它知道服务器的 IP 地址和端口。但是服务器如何将消息发送回客户端呢?它可以获得客户端的外部 IP 地址
我在工作线程中有 QUdpsSocket。我应该如何将传入数据(指针、qbytearray、复制 uint8_t[]、..?)发送到主线程?我应该在哪里删除它? 在本地网络中大约每秒 6000 个数据
嗨,希望有人能帮助我,我正在编写一个小 GUI,它将通过 UDP 套接字发送的数据进行图形化。我决定使用 PyQt 的 QUdpSocket 来实现这一点。我使用了示例代码(我用它来测试我的服务器),
我尝试在QT中使用下面的头文件: #include 但是我得到了错误: QUdpSocket: No such file or directory 最佳答案 你加了吗 QT += network 在
我正在使用 QUdpSocket 从服务器接收数据。当我使用 SFML 接收数据时,我可以通过 SocketUdp 接收数据,但是使用 qt 它不起作用。 void TheClass::Bind()
我在使用 QT Udp 套接字时遇到问题。假设所有标题都正确包含,我正在写: QUdpSocket* s = new QUdpSocket(); bool ok = s->bind(QHostAddr
我遇到了 QUdpSocket 的问题。信号 readyRead() 似乎从未发出过。因此,我决定创建 QTimer 并检查套接字读取队列的状态。这样我确保套接字正常工作(bytesAvailable
我想使用一些标准的QUdpSocket 方法,确切地说是read() 和readAll()。所以,根据QUdpSocket的文档: If you want to use the standard QI
我正在使用 QT Creator 构建一个接收 UDP 数据包的程序。 我试图包含 QUdpSocket 库,但它抛出以下错误(在同一行中重复三次): mainwindow.h:6: error: C
我实际上是在尝试使用 Qt4 制作 DNS 代理应用程序。如果我将 DNS 名称服务器设置为“localhost”,那么我想将所有 DNS 请求转发到 remoteSocket 对象中指定的服务器。除
我是一名优秀的程序员,十分优秀!