回帖:问题解决了,上完整的代码
发送端界面cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include "udpsend.h"
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
int num=0;
QMutex mutex;
void MainWindow::on_pushButton_clicked()
{
UdpSend *thread[5];
for(int i=0;isetupUi(this);
udpsocket=new QUdpSocket(this);
udpsocket->bind(QHostAddress::AnyIPv4,quint16(5555));
connect(udpsocket,SIGNAL(readyRead()),this,SLOT(ricv_msg()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::ricv_msg()
{
QHostAddress sendID;
quint16 sendport;
QByteArray data;
if(udpsocket->hasPendingDatagrams())
{
data.resize(udpsocket->pendingDatagramSize());
udpsocket->readDatagram(data.data(),data.size(),&sendID,&sendport);
}
QString str="发送端的IP:"+sendID.toString()+"端口号:"+QString::number(sendport)+"内容:"+data;
ui->textBrowser->append(str);
}
总结一下
1.首先使用循环创建多线程时需要加锁
2.在接收端的接收函数不要使用while(udpsocket->hasPendingDatagrams()),而要用if(udpsocket->hasPendingDatagrams())
3.接收数据的大小不能用data.resize(udpsocket->bytesAvailable());,而要用data.resize(udpsocket->pendingDatagramSize());,否则可能会有接收大小不一致,会导致出现意外乱码
以上代码为我个人意见,若有问题请指出来共同进步