一.TCP
1.步骤
1.加入 network
QT += core gui network
2.服务端
1.创建ui界面
![](https://img-blog.csdnimg.cn/7aaa3f83ec8f4a6a92db1c487a0470a5.png)
2.在server.h中创建两个指针
#include <QTcpServer>
#include <QTcpSocket>
private:
Ui::server *ui;
QTcpServer* server1;//监听的套接字
QTcpSocket* conn;//通信的套接字
3.在server.cpp中写功能
{
ui->setupUi(this);
ui->sIP->setText("127.0.0.1");
ui->sPort->setText("9999");
//实例化init
server1 = new QTcpServer(this);
//监听
server1->listen(QHostAddress(ui->sIP->text()),ui->sPort->text().toInt());
//新的链接
connect(server1,&QTcpServer::newConnection,this,[=](){
//接受客户端的套接字对象 accept
//sock——addr 结构体 == 类 QTcpSocket
conn = server1->nextPendingConnection();//返回客户端的套接字地址对象
ui->record->append("有新的链接。。。");
//保证conn是一个有效的对象
connect(conn,&QTcpSocket::readyRead,this,[=](){
//接收数据
QByteArray array = conn->readAll();
ui->record->append(array);
});
});
//发送
connect(ui->send,&QPushButton::clicked,this,[=](){
//发送数据
//QTextEdit
conn->write(ui->msg->toPlainText().toUtf8().data());
ui->record->append("Me Say" + ui->msg->toPlainText());
//clear
ui->msg->clear();
});
}
3.客户端
1.创建ui界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/0609165c4c6d469a9c223fad1be364d4.png)
2.在client.h中创建两个指针
#include <QTcpSocket>
private:
Ui::client *ui;
QTcpSocket* client1
3.在client.cpp中写功能
{
ui->setupUi(this);
ui->sIP->setText("127.0.0.1");
ui->sPort->setText("9999");
//初始化 inti
client1 = new QTcpSocket(this);
//链接服务器
client1->connectToHost(QHostAddress(ui->sIP->text()),ui->sPort->text().toInt());
//接受数据
connect(client1,&QTcpSocket::readyRead,this,[=](){
QByteArray array = client1->readAll();
ui->record->append(array);
});
connect(ui->send,&QPushButton::clicked,this,[=](){
client1->write(ui->msg->toPlainText().toUtf8());
ui->record->append("ME Say:" + ui->msg->toPlainText());
ui->record->clear();
});
}
二.UDP
1.步骤
1.加入 network
QT += core gui network
2.服务端
1.创建ui界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/27d04aa200e04637abd8f172479bbb26.png)
2.在server.h中创建两个指针
#include <QUdpSocket>
private:
Ui::server *ui;
QUdpSocket* udp1;
};
3.在server.cpp中写功能
{
ui->setupUi(this);
ui->record->setReadOnly(true);
udp1 = new QUdpSocket(this);
ui->cIP->setText("127.0.0.1");
ui->cPort->setText("9999");
ui->sPort->setText("8888");
//if want receive must bind port
udp1->bind(QHostAddress::AnyIPv4,ui->sPort->text().toInt());
//send msg
connect(ui->send,&QPushButton::clicked,this,[=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("224.0.0.10"),ui->cPort->text().toInt());
ui->record->append("Me Say:" + ui->msg->toPlainText());
ui->msg->clear();
});
//read msg
connect(udp1,&QUdpSocket::readyRead,this,[=](){
//获取传过来数据的大小
qint64 size = udp1->pendingDatagramSize();
//给数据申请一块同样大小的内存 ,赋值是0
QByteArray array(size,0);
//接收数据 array.data()给转化成 char* 类型
udp1->readDatagram(array.data(),size);
ui->record->append("服务端:"+array);
});
}
3.客户端
1.创建ui界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef2439c284804bbb94e221a9f73b1745.png)
2.在client.h中创建两个指针
#include <QUdpSocket>
private:
Ui::client *ui;
QUdpSocket* udp2;
};
3.在client.cpp中写功能
{
ui->setupUi(this);
ui->record->setReadOnly(true);
udp2 = new QUdpSocket(this);
ui->sIP->setText("127.110.0.1");
ui->sPort->setText("8888");
ui->cPort->setText("9999");
//if want receive must bind port
udp2->bind(QHostAddress::AnyIPv4,ui->cPort->text().toInt());
//加入到组播的组中
udp2->joinMulticastGroup(QHostAddress("224.0.0.10"));
//send msg
connect(ui->send,&QPushButton::clicked,this,[=](){
udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sIP->text()),ui->sPort->text().toInt());
ui->record->append("Me Say:" + ui->msg->toPlainText());
ui->msg->clear();
});
//read msg
connect(udp2,&QUdpSocket::readyRead,this,[=](){
//获取传过来数据的大小
qint64 size = udp2->pendingDatagramSize();
//给数据申请一块同样大小的内存 ,赋值是0
QByteArray array(size,0);
//接收数据 array.data()给转化成 char* 类型
udp2->readDatagram(array.data(),size);
ui->record->append("客户端:"+array);
});
}
三.结构图
1.QT中IO设备
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb78009e98524e58846f7b425c70721b.png)
2.Linux下的网络编程过程
![在这里插入图片描述](https://img-blog.csdnimg.cn/63153fa299a547abaed5bd314dfacd23.png)
3.TCP聊天的结构图
![在这里插入图片描述](https://img-blog.csdnimg.cn/6edc96817f714129ac2362c71fe29d16.png)
4.UDP聊天的结构图
![](https://img-blog.csdnimg.cn/a8ceff2404464c7f9ab0339861d45131.png)
5.TCP发送文件的结构图
![在这里插入图片描述](https://img-blog.csdnimg.cn/71006b300c2b4b0282868fd8224c70a0.png)