- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对 QUdpSocket
有疑问。我想创建一个简单的程序来使用 UDP 协议(protocol)发送和接收数据。我已经阅读了许多类似的主题,但我没有找到解决的方法。通信仅适用于 QHostAdress::LocalHost
,然后我提供与发送相同的数据,但如果我想将数据发送到外部设置的具体地址,例如 194.181.161.134
,那是行不通的。这意味着数据已发送但我无法接收。这是我的代码:
class Okno_GL : public QMainWindow
{
Q_OBJECT
public:
explicit Okno_GL(QWidget *parent = 0);
QWidget *wg;
QPushButton *pb;
QPushButton *pl;
QGridLayout *gr;
QUdpSocket *socket;
QHostAddress host;
QHostAddress bcast;
signals:
public slots:
void SLOT_Write();
void SLOT_load();
};
class Receiver : public QObject
{
Q_OBJECT
public:
Receiver();
QUdpSocket *udpSocket;
public slots:
void SLOT_processPendingDatagrams();
void SLOT_StCh(QAbstractSocket::SocketState state);
};
Okno_GL::Okno_GL(QWidget *parent) :
QMainWindow(parent)
{
pb = new QPushButton("write" , this);
pl = new QPushButton("read" , this);
wg = new QWidget(this);
setCentralWidget(wg);
gr = new QGridLayout(wg);
gr->addWidget(pb);
gr->addWidget(pl);
socket = new QUdpSocket(this);
connect(pb , SIGNAL(clicked()) , SLOT(SLOT_Write()));
connect(pl , SIGNAL(clicked()) , SLOT(SLOT_load()));
}
void Okno_GL::SLOT_Write()
{
QByteArray datagram = "gS";
int send;
send = socket->writeDatagram(datagram.data(), QHostAddress("194.181.161.134"), 1200);
}
void Okno_GL::SLOT_load()
{
}
Receiver::Receiver()
{
udpSocket = new QUdpSocket(this);
connect(udpSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)) , this , SLOT(SLOT_StCh(QAbstractSocket::SocketState)));
if(udpSocket->bind(QHostAddress::Any , 1200))
{
qd "bind";
}
else
{
qd "not bind";
}
}
void Receiver::SLOT_processPendingDatagrams()
{
qd "receiver";
QByteArray datagram;
do {
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
} while (udpSocket->hasPendingDatagrams());
qd "datagram" << datagram;
}
void Receiver::SLOT_StCh(QAbstractSocket::SocketState state)
{
qd "slot" << state;
QByteArray datagram = "gS";
if ( state == QAbstractSocket::BoundState ) {
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(SLOT_processPendingDatagrams()) , Qt::QueuedConnection);
}
}
最佳答案
您应该使用 write()
而不是 writeDatagram()
qint64 QUdpSocket::writeDatagram (const char * data, qint64 size, const QHostAddress & address, quint16 port)
Warning: Calling this function on a connected UDP socket may result in an error and no packet being sent. If you are using a connected socket, use write() to send datagrams.
关于c++ - QUdpSocket:程序发送但不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26473353/
我通过 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 对象中指定的服务器。除
我是一名优秀的程序员,十分优秀!