Qt 网络编程

Qt 网络编程

UDP发送数据报的一种方式
QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

将大小为size的数据报发送到端口port的主机地址。返回成功时发送的字节数;否则返回-1。
数据报总是作为一个块写入。数据报的最大大小是高度依赖于平台的,但可以低至8192字节。如果数据报太大,此函数将返回-1,error()将返回DatagramTooLargeError。
一般情况下,发送大于512字节的数据报是不可取的,因为即使它们发送成功,它们也可能在到达最终目的地之前被IP层分段。
警告:在已连接的UDP套接字上调用此函数可能会导致错误,并且不会发送任何数据包。如果使用的是已连接的套接字,请使用write()发送数据报。

**QString 转换为char ***

QString buf = "123"; QBytearray a = buf.toUtf8(); char * b = a.data();

char * 转换为QString

char *p = "132";
QString str=QString(p);

QTCPSocket

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

尝试连接到给定端口上的主机名。protocol参数可用于指定要使用的网络协议(如IPv4或IPv6)。
套接字在给定的openMode中打开,首先进入HostLookupState,然后对host name执行主机名查找。如果查找成功,将发出hostFound(),QAbstractSocket进入ConnectingState。然后尝试连接到查找返回的一个或多个地址。最后,如果建立了连接,QAbstractSocket将进入ConnectedState并发出connected()。
在任何时候,套接字都可以发出error()来表示发生了错误。
主机名可以是字符串形式的IP地址(例如“43.195.83.32”),也可以是主机名(例如“example.com”)。QAbstractSocket只在需要时进行查找。端口按本机字节顺序排列。

bool QAbstractSocket::waitForConnected(int msecs = 30000)

等待直到套接字已连接,最长为30秒。 如果建立连接,则此函数返回true; 否则返回false。 在返回false的情况下,可以调用error()以确定错误原因。
注意:此功能的等待时间可能会比msecs稍长,具体取决于完成主机查找所需的时间。
注意:多次调用此函数不会累积时间。 如果功能超时,连接过程将中止。
注意:此功能在Windows上可能会随机失败。 如果您的软件将在Windows上运行,请考虑使用事件循环和connected()信号。

*QTcpSocket QTcpServer::nextPendingConnection()
返回下一个挂起的连接,作为连接的QTcpSocket对象。
套接字是作为服务器的子级创建的,这意味着销毁QTcpServer对象时会自动删除该套接字。 在完成处理后,还是要明确删除该对象,以避免浪费内存,这仍然是一个好主意。
如果没有挂起的连接,则调用此函数将返回0。
void QTcpServer::incomingConnection(qintptr socketDescriptor)
当新连接可用时,qtcpserver将调用此虚拟函数。socket descriptor参数是接受连接的本机套接字描述符。
基本实现创建一个qtcpsocket,设置套接字描述符,然后将qtcpsocket存储在挂起连接的内部列表中。最后发出newConnection()。
重新实现此函数以在连接可用时更改服务器的行为。
如果此服务器使用的是QNetworkProxy,则socketDescriptor可能无法用于本机套接字函数,并且应仅与qtcpSocket::setSocketDescriptor()一起使用。
注意:如果在重新实现此方法时创建了另一个套接字,则需要通过调用addPendingConnection()将其添加到挂起连接机制中。
注意:如果要将传入连接作为另一个线程中的新qtcpsocket对象处理,则必须将socketDescriptor传递给另一个线程,并在该线程中创建qtcpsocket对象,然后使用其setSocketDescriptor()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值