基於QT的TCP通訊TCPClient服務端C++ 代碼開源
本文是TCP客戶端,如需服務端請點擊基於QT的TCP服務端
Qt是一種基於C++的跨平臺圖形用戶界面應用程序開發框架
本次使用QT的版本是5.6
TCP旨在適應支持多網絡應用的分層協議層次結構。 連接到不同但互連的計算機通信網絡的主計算機中的成對進程之間依靠TCP提供可靠的通信服務。TCP假設它可以從較低級別的協議獲得簡單的,可能不可靠的數據報服務。 原則上,TCP應該能夠在從硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。
可以實現16進制的接收顯示以及16進制的發送。
connect(tcpClient,&QTcpSocket::readyRead,[=](){
//讀數據
QByteArray buffer = tcpClient->readAll();
//檢測是否是HEX顯示
if(ui->ckb_hex_show->isChecked())
{
QString ret(buffer.toHex().toUpper());
int len = ret.length()/2;
for(int j=1;j<len;j++)
{
qDebug()<<j;
ret.insert(2*j+j-1," ");
}
ui->re_edit->append(ret);
}else{
ui->re_edit->append(QString::fromLocal8Bit(buffer));
}
});
connect(tcpClient,&QTcpSocket::disconnected,[=](){
tcpClient->disconnectFromHost();
ui->btn_connect->setText(tr("連接"));
ui->send_btn->setEnabled(false);
ui->re_edit->append(QString("已斷開連接"));
});
/**
*發送數據用 可發HEX數據
* @brief TcpServer::sendData
* @param client
* @param data
*/
void TcpClient::sendData(QTcpSocket *client,QString data){
//如果發送HEX的選擇框選中 那麼就是需要發送HEX數據
if(ui->ckb_hex_send->isChecked())
{
bool ok;
QByteArray ret;
data = data.trimmed();
data = data.simplified();
QStringList sl = data.split(" ");
foreach (QString s, sl) {
if(!s.isEmpty())
{
char c = s.toInt(&ok,16)&0xFF;
if(ok){
ret.append(c);
}else{
QMessageBox::warning(0,tr("錯誤:"),QString("非法的16進制字符: \"%1\"").arg(s));
}
}
}
client->write(ret);
}
//直接發送字符串
else{
client->write(data.toLocal8Bit());
}
}
需要該源碼的可以關注公衆號:智慧小巷
回覆:QT的TCP通訊
即可!