1.修改.pro文件,添加网络支持

QT += network

重要,否则编译出错


2.UDP通信

#include <QUdpSocket>

QUdpSocket *udp = new QUdpSocket();
// 绑定本地端口(可选项)
udp->bind(7777);
// 连接远程端口(配合write使用,一般不用)
udp->connectToHost("192.168.10.150",8888);
// 数据接收回调函数
connect(udp, SIGNAL(readyRead()),this, SLOT(UdpReceivedData()))

UDP发送:

// 指定目标地址及端口发送
QHostAddress addr = QHostAddress("192.168.10.150");
udp->writeDatagram("HelloWorld\r\n", 12, addr, 8888);

UDP接收:

void MainWindow::on_udp_received()
{
    char buff[1024];
    QHostAddress addr; // 发送方IP地址
    quint16 port;      // 发送方端口
    
    memset(buff,0,1024);
    udp->readDatagram(buff,1023,&addr,&port);

    QString str;
    QString ipstr;
    // 转换IP地址(addr。toString转换的结果有问题)
    ipstr.sprintf("%d.%d.%d.%d:%d",
                 (addr.toIPv4Address() >> 24)&0xFF,
                 (addr.toIPv4Address() >> 16)&0xFF,
                 (addr.toIPv4Address() >> 8)&0xFF,
                 (addr.toIPv4Address())&0xFF,
                 port);
    str  = "recv from " + ipstr + "\r\n";
    str += buff;
    ui->textBrowser->append(str);
}

3.TCP客户端:

#include <QTcpSocket>

QTcpSocket *tcp = new QTcpSocket();
// 数据接收信号
connect(tcp, SIGNAL(readyRead()),this,SLOT(on_tcp_received()));
// 连接断开信号
connect(tcp, SIGNAL(disconnected()),this,SLOT(on_tcp_disconnect()))
//  连接服务器
void MainWindow::on_pushButton2_clicked()
{
    tcp->connectToHost("192.168.10.150",9999);
}
// 断开连接
void MainWindow::on_pushButton3_clicked()
{
    tcp->disconnectFromHost();
}    
// 发送数据
void MainWindow::on_pushButton4_clicked()
{
    tcp->write("HelloWorld\r\n",12);
}

TCP数据接收:

void MainWindow::on_tcp_received()
{
    QByteArray bytes;
    bytes = tcp->read(1000);
    ui->textBrowser->append(bytes);

    //char rxbuff[1024];
    //int ret;
    //memset(rxbuff, 0, 1024);
    //ret = tcp->read(rxbuff, 1023);
    //if(ret > 0)
    //{
    //
    //}
}

// TCP断开连接槽函数
void MainWindow::on_tcp_disconnect()
{
    ui->textBrowser->append("disconnect");
}

4.TCP服务器:

#include <QTcpServer>
QTcpServer *server;
QTcpSocket *client;

server = new QTcpServer();
server->listen(QHostAddress::AnyIPv4, 6666);
connect(server, SIGNAL(newConnection()),this,SLOT(on_client_connected()));

客户端建立连接:

void MainWindow::on_client_connected()
{
    ui->textBrowser->append("client connected");
    client = server->nextPendingConnection();
    connect(client, SIGNAL(disconnected()), this, SLOT(on_client_disconnected()));
    connect(client, SIGNAL(readyRead()),this,SLOT(received_form_client()));

    ui->textBrowser->append(client->peerAddress().toString());
}

客户端断开连接:

void MainWindow::on_client_disconnected()
{
    ui->textBrowser->append("client disconnected");
    delete client;
}

接收到客户端数据:

void MainWindow::received_form_client()
{
    char rxbuf[1024];
    memset(rxbuf,0,1024);
    client->read(rxbuf, 1023);
    ui->textBrowser->append(rxbuf);
}

发送数据到客户端:

client->write("HelloWorld\r\n", 12);