UDP是一个轻量级、不可靠、面向数据报的、无连接的协议,多用于可靠性要求不严格,不是非常重要的传输。
//服务器端
#include <QUdpSocket>
h1 = new QUdpSocket(this);
h1.bind(555,QUdpSocket::ShareAddress); //绑定端口号
connect(h1,&QUdpSocket::readyRead, this,&xx::YY);
//当有数据发来时,就发出 readyRead 信号;
h1.hasPendingDatagrams() //判断有无等待的数据包
h1.pendingDatagramSize() //等待的数据包的大小
QByteArray h2;
h1.readDatagram(h2.data(),h2.size());// 读取数据包
//客户端
#include<QUdpSocket> //编译后才产生 资源文件 QT += core gui network
h1 = new QUdpSocket(this);
QByteArray h2;
h1->writeDatagram(h2.data(),h2.size(),QHostAddress::Broadcast,555); //写数据包
(2) TCP是一个用于数据传输的地城网络协议,多个网络协议包括(HTTP和FTP都是基于TCP协议),TCP是面向数据流和连接的可靠的传输协议。
客户端:
#include <QTcpSocket>
h1= new QTcpSocket(this);
connect(h1,&QTcpSocket::readyRead, this,&xx::yy); // 服务器端向客户端发来数据时,就会发送readyRead信号
h1.bytesAvailable() //返回读取的数字包的字节数
QByteArray h2;
h1.read(h2.data(),h2.size()); //套接字读取数据,读取到QByteArray 里面
//套接字连接失败时,,发送信号 QAbstractSocket::SocketError
connect(h1,SIGNAL(QAbstractSocket::SocketError),
this,SLOT(xx(QAbstractSocket::SocketError)));
h1.abort();//终止当前连接到服务器的套接字
h1->connectToHost("127.0.0.1", 8888); //套接字连接服务器 ip地址和端口号 这里是连接主机
h1.write(QByteArray &); // 往服务器端写数据
h1->flush();//立即向服务端发送数据
服务器端:
h1= new QTcpServer(this);
h2= new QTcpSocket(this);
h1.listen(QHostAddress::Any,8888) //监听本机的所有ip地址
h1->errorString(); //假如连接失败,,报出所有的错误信息。
connect(h1,&QTcpServer::newConnection, this,&xxx::yyy);
//每当有新的连接可用时,就会发出此信号。
h2 = h1->nextPendingConnection();
//将下一个挂起的连接作为已连接的QTcpSocket对象返回。//也就是返回当前连接的套接字
connect(h2,&QTcpSocket::disconnected, h2,&QTcpSocket::deleteLater);
// QTcpSocket::disconnected 套接字断开连接时发出的信号
// QTcpSocket::deleteLater 删除套接字
connect(h2,&QTcpSocket::readyRead, this,&Widget::onReadMessage);
// 当有数据发来时。。发出的信号
h2.readAll();//套节字读取所有的数据
h2.write(QByteArray & ) //套接字写数据,这里是往客户端写数据//可以往服务器 或者 客户端写数据
/**********************************************************************************/
h1.incomingConnection(qintptr socketDescriptor)
//虚函数
当有新的连接可用时,QTcpServer调用这个虚函数。socketDescriptor参数是被接受连接的套接字描述符。