本文主要讲述如何使用Qt来实现Tcp客户端以及其中遇到的问题及解决过程。
在测试时,服务端运行在虚拟机上,当点击“连接”按钮时,客户端并没有与服务端建立连接,首先打印ip和port信息,确认无误之后再检测服务端是否出现问题,使用telnet测试没有问题,检测防火墙状态没有问题,在win系统下使用telnet可以建立连接,在Qt代码中添加error处理,显示错误信息"The proxy type is invalid for this operation",经检查本主机vpn未关Qt网络请求走了代理,关掉vpn后成功连接到服务端。
以下附上客户端代码(Qt版)
//widget.h
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked();
void onError(QAbstractSocket::SocketError);
private:
Ui::Widget *ui;
QTcpSocket *socket;
};
//widget.cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
socket=new QTcpSocket;
connect(socket,&QTcpSocket::connected,[this](){
QMessageBox::information(this,"提示","连接成功");
});
connect(socket,&QTcpSocket::disconnected,[this](){
QMessageBox::information(this,"提示","连接断开");
});
connect(socket,
SIGNAL(error(QAbstractSocket::SocketError)),
this,
SLOT(onError(QAbstractSocket::SocketError))
);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QString ip=ui->lineEdit->text();
QString port=ui->lineEdit_2->text();
qDebug()<<ip<<" "<<port;
socket->connectToHost(ip,port.toUShort());
}
void Widget::onError(QAbstractSocket::SocketError){
qDebug() << socket->errorString();
}

2065

被折叠的 条评论
为什么被折叠?



