Qt ------ UDP发送不了或接收不到问题

1、禁用不需要的网卡,比如禁用虚拟机网卡。

 

2、向所有网卡广播数据

/*
 * 直接调用 QUdpSocket 的 writeDatagram() 函数发送数据,如果有多张网卡(装了虚拟机会增加网卡),
 * 可能会导致数据发送不出去,原因(猜测):多张网卡意味着多个广播地址,writeDatagram() 可能只往
 * 某个广播地址发,而这个广播地址又不是你要发送的广播地址。。。。。
 * 所以:向所有广播地址广播数据,保证能向想要广播地址广播数据
 */
void UdpCommunication::sendUdpData(QByteArray data)
{
    QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
    foreach (QNetworkInterface interface, interfaceList)
    {
//        qDebug() << interface.humanReadableName(); //打印网卡名称
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();
        foreach(QNetworkAddressEntry entry, entryList)
        {
            QString str = entry.broadcast().toString();
            if(str != "")
            {
//                qDebug() << str; //打印可用的广播地址
                writeDatagram(data, data.size(), QHostAddress(str), 12345);
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/god-of-death/p/8604571.html

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的应用程序开发框架,支持多种操作系统,包括Windows、Linux、macOS等。UDP(User Datagram Protocol)是一种无连接的传输层协议,它和TCP(Transmission Control Protocol)是并列的两种主要的网络传输协议。C-S则代表Client-Server(客户端-服务器)的网络模型。 在Qt中,我们可以使用QUdpSocket类来实现UDP协议的客户端和服务器的通信。QUdpSocket类是继承自QObject的子类,用于实现UDP socket的创建、绑定、数据发送接收等操作。我们可以通过创建QUdpSocket对象来实例化一个UDP socket。接着,我们可以使用QUdpSocket的bind()函数将该socket绑定到一个特定的IP地址和端口上,以便进行数据接收。使用QUdpSocket的writeDatagram()函数可以向指定的IP地址和端口发送数据。最后,我们可以通过重载QUdpSocket的readyRead()信号实现接收数据的处理。 在C-S模型中,客户端和服务器之间的通信是通过网络实现的。客户端负责向服务器发送请求或数据,服务器则负责接收请求并响应客户端的请求。在UDP协议下,客户端和服务器之间的通信是无连接的,也就是说不需要事先建立连接。 综上所述,Qt可以方便地实现UDP协议的C-S通信。通过使用QUdpSocket类,我们可以创建UDP socket实现数据发送接收,从而实现客户端和服务器之间的通信。这种无连接的通信方式适用于一些对实时性要求较高的场景,但需要注意的是,由于UDP的无连接特性,数据的可靠性较低,容易出现丢包和乱序的情况。因此,在实际开发中,我们需要根据具体的需求和场景选择合适的网络协议和通信方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值