今天學習了TCP通信,相比LINUX網絡編程,Qt通信非常簡單.
先上Qt Tcp通信的小菜,他們的結構.
是吧,他們的結構非常簡單.當然這張圖也是"盜"的.再次說明我博客很多東西都是各位路過大牛使用過的,僅僅是想讓自己忘記的時候能想起來,讓我和一樣剛學習這塊的參考.
不多說了,結構看明白後,自然是上代碼:
服務端:
1:創建 監聽.
tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress::Any, 8000);server connect success,will trigger "newConnection" signal.
connect(tcpServer, &QTcpServer::newConnection,
[=]()
{
tcpsocket = tcpServer->nextPendingConnection();
QString IP = tcpsocket->peerAddress().toString();//得到IP地址
qint16 port = tcpsocket->peerPort();//得到端口
QString temp = QString("[%1:%2]:success connect").arg(IP).arg(port);
ui->RecvTextEdit->setText(temp);//將基本信息打印出來.
//下面這部分是:當有數據發送過來時,讀取數據顯示.<通信部分>
connect(tcpsocket, &QTcpSocket::readyRead,
[=]()
{
QByteArray array = tcpsocket->readAll();
ui->RecvTextEdit->append(array);
}
);
}
);
服務端發送部分:
QString str = ui->SendTextEdit->toPlainText();
tcpsocket->write(str.toUtf8().data());
關閉端口:
tcpsocket->disconnectFromHost();
tcpsocket->close();
好了,上面就是服務端的基本設置,下面開始客戶端.
首先創建socke,建立連接:
QString str = ui->IpAddressLineEdit->text();
qint16 port = ui->PortLineEdit->text().toInt();
tcpsocket->connectToHost(QHostAddress(str), port);
當連接成功時,會觸發connect信號.
tcpsocket = new QTcpSocket(this);
connect(tcpsocket, &QTcpSocket::connected,
[=]()
{
ui->RecvTextEdit->setText("success create connect\n");
}
);
發送部分:
QString str = ui->SendTextEdit->toPlainText();
tcpsocket->write(str.toUtf8().data());
接收部分:
connect(tcpsocket, &QTcpSocket::readyRead,
[=]()
{
QString str = tcpsocket->readAll();
ui->RecvTextEdit->append(str);
}
);
關閉端口:
tcpsocket->disconnectFromHost();
tcpsocket->close();
是不是很簡單,是這個栗子太渣而已.^ _ ^