【问题标题】:QUdpSocket client-server remote host not connectableQUdpSocket 客户端-服务器远程主机不可连接
【发布时间】:2016-10-24 13:04:51
【问题描述】:

我看到的关于我的问题的帖子很少,但是,我似乎仍然无法解决问题,而且回复还不够。所以这是任务:我有 2 台 PC。一台必须传输 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 代码让我失望了。这里有什么帮助吗?

【问题讨论】:

  • 您能说得更具体些吗?你在wireshark中看到了什么? “首先 - 绑定到机器 1 的 IP 失败”是什么意思?
  • 我正在绑定到远程主机,例如:192.168.32.150 和端口 1234,这将是机器 1,我从 192.168.32.150 向正在等待的机器发送 100 个数据报。一个连接 2 个 UDP 套接字的简单示例会很棒。但示例必须在两台计算机之间。
  • 两台机器之间交换少量数据报有那么复杂吗?还没有答案吗?
  • 一点也不。它应该相当简单。
  • 那么为什么机器 1 一直在发送 UDP,而wireshark 从机器 2 捕获它们,但我的绑定从不发出 readyRead 数据报?

标签: qt udp qudpsocket


【解决方案1】:

然而,没有人建议我可以设置防火墙。这就是问题所在。移除防火墙解决了这个问题。

【讨论】:

    【解决方案2】:

    我已经设置了另一个 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;
        }
    
    }
    

    但它似乎没有以正确的方式工作。当我连接时,我可以读取对端主机和端口,但是辅助套接字,对于inaddress必须绑定到什么?我对UDP感到困惑。 [编辑] 只是为了补充一点,我从不在 readyReadUdp() 插槽中中断,我在那里放置了一个断点。阅读器是标准阅读器,但从不调用插槽。所以我想没有什么可以读的。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多