QUdpSocket 客户端-服务器远程主机不可连接
QUdpSocket client-server remote host not connectable
我看到的关于我的问题的帖子很少,但是,我似乎仍然无法解决问题,回复也不够。所以这是任务:我有 2 台电脑。一台必须传输 100 个 udp 数据包,带有简单的测试数据,另一台机器必须读取数据报。我的代码如下:
服务器:
m_socket.udp = new QUdpSocket(this);
if (m_socket.udp->bind(QHostAddress("192.168.32.154"), 1234)) {
m_socket.udp->connectToHost(QHostAddress("192.168.32.154"), 1234);
m_socket.udp->waitForConnected();
}
connect(m_socket.udp, SIGNAL(connected()),
this, SLOT(handleConnection()));
connect(m_socket.udp, SIGNAL(readyRead()),
this, SLOT(readyReadUdp()));
所以...首先 - 绑定到机器 1 的 IP 失败。我不能指定它的 IP。
客户端简单:
p_socket = new QUdpSocket(this);
p_socket->connectToHost(QHostAddress("192.168.32.94"), 1234);
connect(p_socket, SIGNAL(connected()), this, SLOT(writeDgram()));
....
void writeDgram() {
p_socket->write(QByteArray("test"));
}
因此,在 wireshark 中查看的客户端代码来到了我的服务器计算机。但是我的服务器 Qt 代码让我失望了。有什么帮助吗?
我设置了另一个 udp 套接字以这种方式处理传入连接:
void Server::handleConnection()
{
std::cout << "Connected to host" << std::endl;
m_inaddr = new QUdpSocket(this);
connect(m_inaddr, SIGNAL(readyRead()),
this, SLOT(readyReadUdp()));
QHostAddress addr = m_socket.udp->peerAddress();
quint16 port = m_socket.udp->peerPort();
bool conn = m_inaddr->bind(45678);
if (conn) {
m_inaddr->connectToHost(addr, port);
std::cout << "Bound to: " << addr.toString().toStdString()
<< " port:"
<< port << std::endl;
}
}
但它似乎工作不正常。当我连接时,我可以读取对端主机和端口,但是辅助套接字,对于地址必须绑定到什么?我对 UDP 感到困惑。
[编辑] 补充一点,我从不中断 readyReadUdp() 槽,我在那里放置了一个断点。 reader 是标准的,但永远不会调用插槽。所以我想没有准备好阅读的内容。
然而,没有人提议我可以被防火墙保护。这就是问题所在。删除防火墙解决了这个问题。
我看到的关于我的问题的帖子很少,但是,我似乎仍然无法解决问题,回复也不够。所以这是任务:我有 2 台电脑。一台必须传输 100 个 udp 数据包,带有简单的测试数据,另一台机器必须读取数据报。我的代码如下:
服务器:
m_socket.udp = new QUdpSocket(this);
if (m_socket.udp->bind(QHostAddress("192.168.32.154"), 1234)) {
m_socket.udp->connectToHost(QHostAddress("192.168.32.154"), 1234);
m_socket.udp->waitForConnected();
}
connect(m_socket.udp, SIGNAL(connected()),
this, SLOT(handleConnection()));
connect(m_socket.udp, SIGNAL(readyRead()),
this, SLOT(readyReadUdp()));
所以...首先 - 绑定到机器 1 的 IP 失败。我不能指定它的 IP。
客户端简单:
p_socket = new QUdpSocket(this);
p_socket->connectToHost(QHostAddress("192.168.32.94"), 1234);
connect(p_socket, SIGNAL(connected()), this, SLOT(writeDgram()));
....
void writeDgram() {
p_socket->write(QByteArray("test"));
}
因此,在 wireshark 中查看的客户端代码来到了我的服务器计算机。但是我的服务器 Qt 代码让我失望了。有什么帮助吗?
我设置了另一个 udp 套接字以这种方式处理传入连接:
void Server::handleConnection()
{
std::cout << "Connected to host" << std::endl;
m_inaddr = new QUdpSocket(this);
connect(m_inaddr, SIGNAL(readyRead()),
this, SLOT(readyReadUdp()));
QHostAddress addr = m_socket.udp->peerAddress();
quint16 port = m_socket.udp->peerPort();
bool conn = m_inaddr->bind(45678);
if (conn) {
m_inaddr->connectToHost(addr, port);
std::cout << "Bound to: " << addr.toString().toStdString()
<< " port:"
<< port << std::endl;
}
}
但它似乎工作不正常。当我连接时,我可以读取对端主机和端口,但是辅助套接字,对于地址必须绑定到什么?我对 UDP 感到困惑。 [编辑] 补充一点,我从不中断 readyReadUdp() 槽,我在那里放置了一个断点。 reader 是标准的,但永远不会调用插槽。所以我想没有准备好阅读的内容。
然而,没有人提议我可以被防火墙保护。这就是问题所在。删除防火墙解决了这个问题。