Qt中创建TCP客户端
1. .pro文件
必修在.pro文件中添加如下一句
QT += network
在头文件包含以下内容
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QHostAddress>
#include "qhostinfo.h"
private:
QTcpSocket * socket;
2.建立客户端
socket = new QTcpSocket(this);
3.连接服务器
socket->connectToHost(QHostAddress::LocalHost,1200);
//或者
QString addr = ui->SeverIP->text();//获得服务器IP
quint16 port = ui->spinPort->value();//获得端口号
tcpClient->connectToHost(addr,port);//连接服务器
4.连接或断开状态监测
TCP底层有许多状态相应函数,可以为这些状态响应函数添加槽函数进而进行一些操作
连接成功
connect(socket,SIGNAL(connected()),this,SLOT(onConnected()));//连接
void MainWindow::onConnected()
{
ui->textEdit->append("已连接到服务器");
}
断开连接
void MainWindow::on_actDisconnect_clicked()
{
if(socket->state() == QAbstractSocket::ConnectedState)//如果是连接状态
{
socket->disconnectFromHost();//断开连接
}
}
connect(socket,SIGNAL(disconnected()),this,SLOT(onDisConnected()));//断开
void MainWindow::onDisConnected()
{
ui->textEdit->append("端口已与服务器的断开连接");
}
5.发送数据
发送数据要为QByteArray类
void MainWindow::on_actSend_clicked()
{
QString msg = ui->information->text();//获取需要发送的信息
ui->textEdit->append("[out]"+msg);//在信息栏显示
ui->information->clear();//清楚存储栏数据
ui->information->setFocus();
QByteArray str = msg.toUtf8();
str.append("\n");
tcpClient->write(str);//发送
}
6.读取数据
首先需要判读是否有数据进入,一般设置槽函数来实现读取操作
connect(socket,SIGNAL(readyRead()),this,SLOT(onSocketReadyRead()));//读取数据
void MainWindow::onSocketReadyRead()
{
while(socket->canReadLine())//无新的一行输入时
{
ui->textEdit->append("[in]"+socket->readLine());//读取数据
}
}
读取数据也可以全部读入readAll();