记qt-tcp有关知识(tcp客户端篇一)

本人并不是专业学做qt的只是公司的一个项目而接触qt。现在还没有计划开始学qt,可能是由于想学的太多了把。

我现在主要要做一个tcp客户端可以往服务器上发送数据然后接收服务器返回的数据。借鉴了一下公司以前大神的程序吧。慢慢摸索一下关于qt搭建一个客户端的知识。

使用qt做一个tcp客户端还是非常简单的。简单到无脑。

1.首先包含头文件#include <QtNetwork>因为我们要使用其中重要的类QTcpSocket。那么我们来建立一个对象tcpClient。其实看了很多的c++思想的实现,我们每添加一个功能都要构件自己的类用它的构造函数来初始化。某些工作。

class my_text_socket: public QObject

{
    Q_OBJECT
public:
    explicit my_text_socket(QObject *parent = NULL);


    int connect_to_server();
    int disconnect_from_server();
signals:
public slots:
    void tcpClientConnected();
    void tcpClientError(QAbstractSocket::SocketError socketError);
    void tcpClientReadMsg();
private:
    QTcpSocket tcpClient;
    QString ip;
    int port;
};

这里是我封装的结构是借鉴公司的前辈的,虽然写这段程序的大神早走了。

2.构造函数中我们要对qtcpsocker的信号提供必要的槽。

my_text_socket::my_text_socket(QObject *parent) :
QObject(parent)
{
    connect(&tcpClient, SIGNAL(connected()), this, SLOT(tcpClientConnected()));
    connect(&tcpClient, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(tcpClientError(QAbstractSocket::SocketError)));
    connect(&tcpClient,SIGNAL(readyRead()),this,SLOT(tcpClientReadMsg()));
}

tcpClientConnected使我们为connected信号提供的槽。当我们的tcp协议成功连接的时候会发出。

tcpClientError我们为tcp错误建立的槽。它管理一切tcp过程中发生的错误。

3.connect_to_server()函数来建立建立连接

int my_text_socket::connect_to_server()
{
    static int retry = 5;
    if(--retry > 0) {
        tcpClient.connectToHost("192.168.4.171", 6000);
    }
    printf("I try to connect\n");
    return 0;
}

这个函数的主力军是connectToHost

查qt的帮助文档发现他是一个重载函数

形式1:void QAbstractSocket::connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);

形式2:virtual void connectToHost(const QHostAddress & address, quint16 port, OpenMode openMode = ReadWrite);

像我那样定义居然也成功了不可思议。还是不太了解c++的原理吧。本人学c的自从接触了qt才开始学c++低子不好。

4.最后我们还需要定义一下tcpClientError(QAbstractSocket::SocketError socketError);

网上的一个问答很好的揭示了这一原理。其问题是这样的,

如何判断qt中的connectToHost函数成功连接服务器?

试图连接主机host的指定端口port并且立即返回。任何连接或者正在进行的连接被立即关闭,并且QSocket进入HostLookup 状态。当查找成功,它发射hostFound(),开始一个TCP连接并且进入Connecting状态。最后,当连接成功时,它发射connected()并且进入Connected状态。如果在任何一个地方出现错误,它发射error()。host可以是一个字符串形式的IP地址,也可以是一个DNS名称。如果需要QSocket将会进行一个普通的DNS查找。注意port是本地字节顺序,不像其它库那样。

这里就不详细研究了。等项目做完了有空可以学学把。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值