Qt TCP通信

TCP通信

        TCP是一种被大多数Internet网络协议用于数据传输的低级网络协议,它是可靠,面向流,面向连接的传输协议,特别适合用于连接数据传输。

        TCP通信必须先建立TCP连接,通信端分为客户断喝服务器端。QT提供QTcpSocket类和QTcpServer类用于建立Tcp通信应用程序。服务器端程序必须使用QTcpServer用于建立连接后使用(Socket)进行通信。

        QTcpServer是从QObject继承的类,它主要用户服务器端建立网络监听,创建网络Socket连接QTcpServer类的主要接口函数是

        服务器端程序首先需要用QTcpServer::listen()开始服务器端监听。可以指定监听的IP地址和端口,一般一个服务程序监听某个端口的网络连接。

        当有新的客户端接入的时候,QTcpServer内部的incomingConnection()函数会创建一个与客户端连接QTcpSocket对象,然后发射信号 newConnection。在newConnection()信号的曹函数中,可以用nextPendingConnection()接受客户端的连接,然后使用QTcpSecket与客户端通信。

      所以在客户端与服务器建立TCP连接后,具体的数据通信是通过QTcpSocket完成的QTcpSocket类提供了tcp协议的接口,可以用QTcpSocket类实现标准的网络通信协议如POP3,SMPT,NNTP也可以设计自定义协议。

      QTcpSocket是从QIODevice间接继承的类,所以具有流读写的功能。QTcpSocket和下一节要降到的QUdpSocket的类继承关系

        QTcpSocket类除了构造函数和析构函数,其他函数都是从QAbstractSocket继承或重定义的QAbstractSocket用户tcp通信的主要接口函数如下

TCP客户端使用QTcPSocket与TCP服务器建立连接并通信。

        客户端的QTcpSocket实例首先通过 connectToHost()尝试连接到服务器,需要制定服务器的IP地址和端口。connectToHost()是异步方式连接服务器,不会阻塞程序运行,连接后发射connected()信号。

        如果需要使用阻塞方式了解服务器,则使用WaitForConnected()函数阻塞程序运行,直接连成功或失败。例如:

socket->connectToHost("192.168.1.100",1340);
if(socket->waitForConnected(1000))
    qDebug("Connected!");
    

        与服务器建立socket接连后,就可以向缓冲区写数据或从接受缓冲区读取数据,实现数据的通信。当缓冲区有数据进入时,会发射readRead()信号,一般在此信号的曹函数里读取缓冲区数据。QTcpSocket实例既可以接收数据也可以发送数据,且接收与发射时异步工作的,有各自的缓冲区。

        

        作为演示TCP通信的实例,创建了一个TCPClient程序和一个TCPServer程序,两个程序运行时界面如下

TCPServer程序具有如下功能:

1.根据指定IP地址和端口打开网络监听,有客户端连接时创建socket连接:

2.采用基于行的数据通信协议

3.在状态栏显示服务器监听状态和socket的状态

TCPClient程序 程序具有如下的功能:

1.通过IP地址和端口号连接到服务器。

2.采用基于行的数据通信协议,与服务器端收发信息。

3.处理QTcpSocket的StateChange()信号,在状态栏显示socket的状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值