Qt网络编程:QSctpSocket

一、描述

1.1、SCTP

1、SCTP(流控制传输协议)是一种传输层协议,其作用类似于流行的TCP 和 UDP协议。

2、与 UDP 一样,SCTP 也是面向消息的,但它确保消息的可靠、按序传输,并使用 TCP 等拥塞控制。

3、SCTP 是面向连接的协议,它提供端点之间多个数据流的完整同时传输这种多流允许数据通过独立的通道传递,因此如果一个流中的数据丢失,则其他流的传递不会受到影响。

4、由于面向消息,SCTP 传输一系列消息,而不是像 TCP 那样传输不间断的字节流。就像在 UDP 中一样,在 SCTP 中,发送方在一次操作中发送一条消息,而该消息在一次操作中被传递到接收应用程序进程。但与 UDP 不同的是,交付是有保证的。

5、SCTP 支持多宿主,这意味着连接的端点可以具有与其关联的备用 IP 地址,以便绕过网络故障或不断变化的条件进行路由。

1.2、QSctpSocket描述

QSctpSocket 是 QTcpSocket 的子类,它可以在两种模式下运行:

  • 连续字节流(TCP 仿真):要设置连续字节流模式,请实例化 QSctpSocket 并使用负值设置setMaximumChannelCount()。这提供了将 QSctpSocket 用作常规缓冲 QTcpSocket 的能力。可以调用connectToHost() 发起与端点的连接,write() 发送和read() 接收来自对等方的数据,但无法区分消息边界。
  • 多流数据报模式:默认情况下,QSctpSocket 在数据报模式下运行。例:
 QSctpSocket *socket = new QSctpSocket(this);

 socket->setMaxChannelCount(16);
 socket->connectToHost(QHostAddress::LocalHost, 1973);

 if (socket->waitForConnected(1000)) {
     int inputChannels = socket->readChannelCount();
     int outputChannels = socket->writeChannelCount();

     ....
 }

在数据报模式下,QSctpSocket 为每个通道独立执行数据报缓冲。您可以通过调用writeDatagram() 将数据报排队到当前通道的缓冲区,并分别通过调用 readDatagram() 读取待处理的数据报。

允许在数据报模式下使用标准 QIODevice 函数 read()、readLine()、write() 等,其限制与连续字节流模式相同。

注意:Windows 平台不支持此功能。

二、成员函数

1、bool isInDatagramMode()

socket是否以数据报模式运行。

2、QNetworkDatagram readDatagram()

从当前读取通道的缓冲区读取数据报,并将其作为 QNetworkDatagram 对象连同发送方的主机地址和端口一起返回。

3、void setMaximumChannelCount(int count)

设置在数据报模式下支持的最大通道数。如果为 0,则通道将由远程端点设置。负数则设置此socket为连续字节流模式。仅当 QSctpSocket 处于 UnconnectedState 时调用此方法。

4、bool writeDatagram(const QNetworkDatagram &datagram)

将数据报写入当前写入通道的缓冲区,写入成功返回真。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值