-
获得本机网络信息
QHostInfo::localHostName();
获得主机信息
QList<QHostAddress> listAddress = hostInfo.addresses();
获得主机的IP地址列表QString detail=""; QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(); // 获得主机的IP地址和网络接口列表 for(int i=0;i<list.count();i++) { QNetworkInterface interface=list.at(i); detail=detail+tr("设备:")+interface.name()+"\n"; // 获得网络接口的名称 detail=detail+tr("硬件地址:")+interface.hardwareAddress()+"\n"; // 获得网络接口的硬件地址 QList<QNetworkAddressEntry> entryList=interface.addressEntries();// 获得每个网络接口包括0或多个IP地址,包括子网掩码和广播地址 for(int j=1;j<entryList.count();j++) { QNetworkAddressEntry entry=entryList.at(j); detail=detail+"\t"+tr("IP 地址:")+entry.ip().toString()+"\n"; detail=detail+"\t"+tr("子网掩码:")+entry.netmask().toString() +"\n"; detail=detail+"\t"+tr("广播地址:")+entry.broadcast().toString() +"\n"; } } QMessageBox::information(this,tr("Detail"),detail);
-
基于UDP的工作原理
UDP发送的是报文,报文大小不能超过64KB;
UDP通信不与服务器建立连接,只负责调用发送函数向服务器发送数据报。服务器也从不接受连接,只负责调用接收函数,等待客户端的数据到达。
QT中通过QUdpSocket实现UDP协议的编程。
服务器端发送信息udpSocket = new QUdpSocket(this); port = 5555;// 指定UDP广播端口号 QString msg = TextLineEdit->text();// 发送信息 int length=0; if(msg=="") { return; } if((length=udpSocket->writeDatagram(msg.toLatin1(), msg.length(),QHostAddress::Broadcast,port))!=msg.length()) { return; }
客户端接受信息
port =5555; // 设置UDP的端口号参数,指定在此端口上监听数据 udpSocket = new QUdpSocket(this); // 创建一个QUdpSocket connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));// 连接QIODevice的readyRead()信号 bool result=udpSocket->bind(port); // 绑定到指定的端口上,result为false时端口不可用 void UdpClient::dataReceived() { while(udpSocket->hasPendingDatagrams()) // 判断是否有数据报可读,hasPendingDatagrams方法至少有一个数据报可读是返回true { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); // 获得第一个数据报长度 udpSocket->readDatagram(datagram.data(),datagram.size());// 读取数据报 QString msg=datagram.data(); // 数据内容 } }
-
基于TCP的工作原理
TCP传输控制协议(Transmission Control Protocol)是一种可靠的、面向连接、面向数据流的传输协议。
HTTP/FTP等高层应用协议以TCP为基础。
TCP适合连续数据传输。
-
TCP与UDP的比较
QT 网络与通信之客户端(UDP)以及TCP和UDP比较
最新推荐文章于 2024-08-20 17:15:02 发布