QT5开发笔记(三)--网络编程
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);