首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt,通过VPN发送UDP (Hamachi)

Qt,通过VPN发送UDP (Hamachi)
EN

Stack Overflow用户
提问于 2014-09-28 17:40:55
回答 1查看 473关注 0票数 0

我正在编写应用程序,它将语音从一台计算机发送到另一台计算机。我有一个简单的"sender“实现

代码语言:javascript
复制
VoiceSender::VoiceSender(QAudioFormat &format, QString ip){
    input = new QAudioInput(format);
    QUdpSocket* socket = new QUdpSocket();
    socket->connectToHost(ip, 14433);
    input->start(socket);
}

只需从麦克风获取所有数据,并将其作为UDP发送到指定的IP即可。

另一边是程序,通过UDP接收到所有的数据,并通过音频系统进行播放

代码语言:javascript
复制
Interlocutor::Interlocutor(QAudioFormat &format){
    socket = new QUdpSocket();
    socket->bind(QHostAddress::Any, 14433);
    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
        if (!info.isFormatSupported(format))
            format = info.nearestFormat(format);
    output = new QAudioOutput(format);
    device = output->start();
    connect(socket, SIGNAL(readyRead()), this, SLOT(playData()));
}

void Interlocutor::playData()
{
    qDebug() << QDateTime::currentDateTime();
    while (socket->hasPendingDatagrams())
    {
        QByteArray data;
        data.resize(socket->pendingDatagramSize());
        socket->readDatagram(data.data(), data.size());
        device->write(data.data(), data.size());
    }
}

如果两台位于本地网络中的计算机都工作正常,我就可以在计算机之间传输语音。我试着在虚拟专用网中运行它。为此,我在两台计算机上都运行了Hamachi,但一无所获。从未调用过Slot playData()。我运行Wireshark,看到计算机得到了UDP包,但Qt没有。我应该怎么做才能修复它。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-09-28 18:36:10

您应该检查QUdpSocket::bind函数的结果。

布尔端口(常量QHostAddress & QUdpSocket::bind,quint16端口)

如果成功,则函数返回true,套接字进入BoundState;否则返回false。

代码语言:javascript
复制
if (!socket->bind(QHostAddress::Any, 14433))
{
    QMessageBox::warning(0, "Error", "Binding Failed");
}

如果绑定失败,请检查防火墙是否未阻止您或此端口是否未被其他应用程序使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26083598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档