Udp通信 接收消息 我只监视本机哪个端口有没有数据就行了
置于是哪个机器发过来的 我也不知道 但发送端要发送过来 对方必须知道我的IP和端口
应该可以通过分析发过来的包 把哪个Ip发过来的消息解出来 如果仅仅对数据感兴趣 那么就不用关系这个ip了
1 在.pro中加入 QT += network
2 mainwindow.h 中加入 #include <QUdpSocket> 的头文件
3 加入两个 QUdpSocket 类 一个 *read 一个 udpsocket
QUdpSocket *read;
QUdpSocket udpsocket;
4 添加发送按键
从网上找到的代码发送
void MainWindow::on_SendpushButton_clicked()
{
QString ip_send=ui->IPlineEdit->text();
quint16 port =ui->PortlineEdit->text().toInt();
//获取文本框内容
QString str=ui->SendtextEdit->toPlainText();
//将消息发送给指定的IP
udpsocket.writeDatagram(str.toUtf8(),QHostAddress(ip_send),port);
//udpsocket.writeDatagram(str.toUtf8(),QHostAddress::LocalHost,45454);
//内容 ip port 发送
//发送后清除
ui->SendtextEdit->clear();
}
5 监听按钮的代码
void MainWindow::on_ListenpushButton_clicked()
{
read=new QUdpSocket(this);
quint16 port=ui->PortListenlineEdit_2->text().toInt();
QString ip_listen=ui->IpListenlineEdit->text();
read->bind(QHostAddress(ip_listen),port,QUdpSocket::ShareAddress);
这句代码是监听不到其他电脑的
read->bind(port,QUdpSocket::ShareAddress)
这样就可以了 理解在最开始
//read->bind(port,QUdpSocket::ShareAddress);
//read->bind(ui->PortlineEdit->text().toInt(),QHostAddress(ui->IplineEdit->text())); 这句不行
connect(read,SIGNAL(readyRead()),this,SLOT(readData()));
ui->ListenpushButton->setEnabled(false);
}
//监听QhosAddress(ip_listen) port
6 读取
void MainWindow::readData()
{
while(read->hasPendingDatagrams())//拥有等待的数据报
{
QByteArray MyDate;//因为传送来的东西是未知的 用ByteArray
MyDate.resize(read->pendingDatagramSize()); //MyDate数据大小取决于收到的数据
read->readDatagram(MyDate.data(),MyDate.size());//读取数据 放到MyDate中
QString str=ui->RecvtextEdit->toPlainText();
str=tr(MyDate);
ui->RecvtextEdit->append(str);
}
}