// This slot is connected to QAbstractSocket::readyRead()
void SocketClass::readyReadSlot()
while (!socket.atEnd()) {
QByteArray data = socket.read(100);
9、bool bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
使用 BindMode 模式绑定Socket要连接的端口和地址。
- 对于 UDP Socket,绑定后,只要 UDP 数据报到达指定的地址和端口,就会发出信号 QUdpSocket::readyRead()。
- 对于 TCP Socket,此函数可用于指定用于传出连接的接口,这在多个网络接口的情况下很有用。
如果未指定端口,则选择随机端口。
成功时,函数返回 true,Socket进入 BoundState状态。
10、bool bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
使用 BindMode 模式绑定到Socket要连接的QHostAddress:Any地址。 如果未指定端口,则选择随机端口。
11、qint64 bytesAvailable()
返回等待读取的传入字节数。
12、qint64 bytesToWrite()
返回等待写入的字节数。(当控制返回到事件循环或调用 flush() 时写入字节。)
13、bool canReadLine()
是否可以从Socket读取一行数据。
14、void close()
关闭Socket的 I/O 设备并调用 disconnectFromHost() 关闭Socket的连接。
15、void connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
尝试在给定端口上建立到 hostName 的连接。protocol 参数可用于指定要使用的网络协议(例如 IPv4 或 IPv6)。
连接过程:
- Socket在给定的 openMode 中打开
- 进入 HostLookupState状态
- 执行 hostName 的主机名查找。
- 如果查找成功,则发出 hostFound()信号 并进入 ConnectingState状态。然后尝试连接到查找返回的一个或多个地址。 最后,如果建立了连接则进入 ConnectedState状态 并发出 connected()信号。
在任何时候,Socket都可以发出 errorOccurred() 来表示发生了错误。
hostName 可以是字符串形式的 IP 地址(例如“43.195.83.32”),也可以是主机名(例如“example.com”)。
16、void connectToHost(const QHostAddress &address, quint16 port, QIODevice::OpenMode openMode = ReadWrite)
重载函数。
17、void disconnectFromHost()
尝试关闭Socket。 如果有待写入的数据等待写入,将进入 ClosingState状态 并等待所有数据写入完毕。 最终,它将进入 UnconnectedState 并发出 disconnected() 信号。
18、QAbstractSocket::SocketError error()
返回上次发生的错误类型。
19、bool flush()
该函数尽可能多地从内部写缓冲区写入底层网络Socket,不阻塞。如果有任何数据被写入则返回true。
如果需要立即开始发送缓冲数据,请调用此函数。成功写入的字节数取决于操作系统。 在大多数情况下不需要调用此函数,因为一旦控制权返回到事件循环,QAbstractSocket 将自动开始发送数据。如果没有事件循环,则应该调用 waitForBytesWritten()。
20、bool isValid()
Socket是否有效并且可以使用。(Socket的状态必须是 ConnectedState状态 才能进行读写)
21、QHostAddress localAddress()
如果可用,返回本地Socket的主机地址; 否则返回 QHostAddress::Null。
22、quint16 localPort()
如果可用,返回本地Socket的主机端口号。
23、QHostAddress peerAddress()
如果Socket处于 ConnectedState状态 中,则返回已连接对等方的地址;否则返回 QHostAddress::Null。
24、QString peerName()
返回由 connectToHost() 指定的对等方的名称。
25、quint16 peerPort()
如果Socket处于 ConnectedState 状态中,则返回已连接对等方的端口。
26、void resume()
继续在Socket上传输数据。 只有在Socket设置为暂停通知并且收到通知后,才应使用此方法。 当前支持的唯一通知是 QSslSocket::sslErrors()。 如果Socket未暂停,则调用此方法会导致未定义的行为。
27、void setProxy(const QNetworkProxy &networkProxy)
设置网络代理。
28、void setReadBufferSize(qint64 size)
设置QAbstractSocket 的内部读取缓冲区的大小。
如果缓冲区大小限制在特定大小,则 QAbstractSocket 将不会缓冲超过此大小的数据。默认情况下,缓冲区大小为 0 意味着读取缓冲区是无限的,并且所有传入的数据都将被缓冲。
只有 QTcpSocket 使用 QAbstractSocket 的内部缓冲区;QUdpSocket 根本不使用任何缓冲,而是依赖于操作系统提供的隐式缓冲。 因此,在 QUdpSocket 上调用此函数无效。
29、bool waitForBytesWritten(int msecs = 30000)
此函数会阻塞,直到至少一个字节已写入Socket并已发出 bytesWritten() 信号。 该函数将在 msecs 毫秒后超时。
如果发出 bytesWritten() 信号,则该函数返回 true; 否则返回 false(如果发生错误或操作超时)。
30、bool waitForConnected(int msecs = 30000)
等待Socket连接,最多 msecs 毫秒。如果连接已经建立,这个函数返回true;否则返回false。 在返回false的情况下,可以调用error()来确定错误的原因。如果 msecs 为 -1,则此函数不会超时(一直等待)。例:
socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
qDebug("Connected!");
31、bool waitForDisconnected(int msecs = 30000)
等待直到Socket断开连接,最多 msecs 毫秒。 如果连接成功断开,此函数返回true; 否则返回 false(如果操作超时、发生错误或此 QAbstractSocket 已断开连接)。 在返回false的情况下,可以调用error()来确定错误的原因。如果 msecs 为 -1,则此函数不会超时。例:
socket->disconnectFromHost();
if (socket->state() == QAbstractSocket::UnconnectedState
|| socket->waitForDisconnected(1000)) {
qDebug("Disconnected!");
32、bool waitForReadyRead(int msecs = 30000)
此函数会阻塞,直到有新数据可供读取且 readyRead() 信号已发出。 该函数将在 msecs 毫秒后超时; 默认超时为 30000 毫秒。如果发出 readyRead() 信号并且有新数据可供读取,则该函数返回 true; 否则返回 false(如果发生错误或操作超时)。
TCP:(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相比而言,UDP 是开放式、无连接、不可靠的传输层通信协议。
在 qt 中的网络编程和之前在 windows 中的网络编程的基本步骤是一样的。
服务器有两个套接字,一个负责监听(QTcpServer),还有一个负责通信(QTcpSocket),
客户端只有一个负责通信的套接字(QTcpSocket)。
必须要在.pro 文件中添加 QT += network 才可以进行网络编程,否则是访问不到
<QTcpSocket>头文件的。
QAbstractSocket is the base class for QTcpSocket and QUdpSocket and contains all common functionality of these two classes
是QTcpSocket and QUdpSocket的基类;1.enum QAbstractSocket::SocketType:
QAbstractS
近日要用Qt设计路灯节能监控系统的上位机,用到QTcpSocket类,参考文档英文的,看起来不方便,按学习笔记的方式,归纳如下:
1. enum QAbstractSocket::NetworkLayerProtocol
This enum describes the network layer protocol values used in Qt.
放代码前先来看这个信号:
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
当socket状态改变后就会触发这个信息,其中socketState参数为当前socket的状态。
这里要注意的是QAbstract...
QAbstractSocket 是 QTcpSocket 和 QUdpSocket 的基类,包含这两个类的所有通用功能。实例化QTcpSocket或QUdpSocket。创建一个本机 Socket 描述符,实例化QAbstractSocket,然后调用setSocketDescriptor()封装本机 Socket。一般我使用的时候就是直接使用的 实例化 QTcpSocket 或者 QUdpSocket。
QAbstractSocket是QTcpSocket和QUdpSocket的基类,包含这两个类的所有共同功能。实例化QTcpSocket或QUdpSocket。创建原生套接字描述符,实例化QAbstractSocket,并调用setSocketDescriptor()函数将原生套接字包装起来。TCP(传输控制协议)是一种可靠的、面向流的、面向连接的传输协议。UDP(用户数据报协议)是一种不可靠的、面向数据报的、无连接的协议。
放代码前先来看这个信号:当socket状态改变后就会触发这个信息,其中socketState参数为当前socket的状态。这里要注意的是QAbstractSocket::SocketState是没有注册的元类型,如果是进行队列连接(connect的第四个参数,主要在跨线程时用在本人的其他博文有对于connect第四个参数的详细介绍)就得用Q_DECLARE_METATYPE()声明,以及qRegisterMetaType进行注册(同样也有对应的博文讲解)
1、QAbstractSocket中的connectToHost说明:void connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)尝试在给定端口上建立到 hostName 的连接。protocol 参数可用于指定要使用的网络协议(例如 IPv4
套接字用来控制网络传输数据。
TCP(Transmission Control Protocol,传输控制协议),是一种面向连接(连接导向)的、可靠的、基于字节流的传输层,在正式收发数据前,必须和对方建立可靠的连接。
UDP(User Data Protocol,用户数据报协议)是与T
这学期的C++大作业是结合Qt做一个医院的病人排号系统,所以最近在学习Qt。最好的学习方法就是实践,多动手做一些东西才能了解和熟悉Qt的那些库函数,周五晚上做了个记事本小软件,实现了大部分微软记事本的功能。写下留存记录。来几张效果图吧:小软件的主要功能包括:新建文件,打开文件,保存文件,文件另存为撤销,重做复制,剪切,粘贴改变字体,改变字体颜色一个一个慢慢说。首先是软件的基本界面,有了界面再添加功能。构成界面的主体就是菜单栏,工具栏和文本区域。上面代码声明三个菜单项,然后再添加到菜单栏,Qt里一个menuBar()函数返回主窗口的菜单栏。也可以像下面这样用QMenuBar声明一个菜单栏:因为我