主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QSocket类提供了一个有缓冲的TCP连接。 详情请见……
#include <qsocket.h>
它提供一个完全非阻塞的QIODevice,使用套接字特征代码来修改和扩展了QIODevice的应用编程接口。
你和可能常常调用的connectToHost()、bytesAvailable()、canReadLine()这些函数并且它们继承了QIODevice。
connectToHost()是一个最常用的函数。就像它的名字那样,它打开一个被命名的主机的连接。
绝大多数网络协议是基于包的或者基于行的。canReadLine()可以识别一个连接中是否包含一个完全不可读的的行,并且bytesAvailable()返回可以被读取的字节数量。
信号error()、connected()、readyRead()和connectionClosed()通知你连接的进展。还有一些不太常用的信号。当connectToHost()已经完成它的DNS查找并且正在开始它的TCP连接时,hostFound()被发射。当close()成功时,delayedCloseFinished()被发射。当QSocket把它的“写”队列中的数据移到TCP运行中。
还有几个套接字的访问函数:state()返回这个对象是否空闲,是否正在做DNS查找,是否正在连接,还是一个正在操作的连接,等等。address()和port()返回连接所使用的IP地址和端口。peerAddress()和peerPort()函数返回自身所用到的IP地址和端口并且peerName()返回自身所用的名称(通常是被传送给connectToHost()的名字)。socket() 返回这个套接字所用到的QSocketDevice的指针。
QSocket继承了QIODevice并且重新实现了一些函数。通常你可以把它作为QIODevice来写,并且绝大多数情况也可以作为QIODevice来读。但匹配的不够完美,因为QIODevice应用编程接口是为同一个机器可以控制的设备而设计的,而异步的端对端网络连接和这个不太一样。例如,没有什么可以和QIODevice::size()确切地匹配。open()、close()、flush()、size()、at()、atEnd()、readBlock()、writeBlock()、getch()、putch()、ungetch()和readLine()的文档详细地描述了不同点。
也可以参考QSocketDevice、QHostAddress、QSocketNotifier和输入/输出和网络。
这个枚举变量指定了可能的错误:
这个枚举变量定义了连接状态:
parent和name参数被传递给QObject的构造函数。
也可以参考close()。
Reimplemented from QIODevice.
向前移动读索引到index并且如果操作成功返回真。向前移动读索引意味着忽略进入的数据。
从QIODevice中重新实现的。
从QIODevice中重新实现的。
也可以参考bytesToWrite()。
实例:network/networkprotocol/nntp.cpp。
也可以参考bytesAvailable()。
当数据被实际写到网络时,这个信号被发射。nbytes参数指定了多少字节被写了。
bytesToWrite()函数常常会在相同的上下文中被使用,并且它说明了还有多少数量的缓存字节数要写。
也可以参考writeBlock()和bytesToWrite()。
注意如果本地出乎意料地关闭连接,这个函数返回假。这也就是说这样的循环不会工作:
while( !socket->canReadLine() ) // 错了。 ...
也可以参考readLine()。
实例:network/clientserver/client/client.cpp、network/httpd/httpd.cpp、network/mail/smtp.cpp和network/networkprotocol/nntp.cpp。
读缓存被清空。
如果输出缓存是空的,状态被设置为QSocket::Idle并且连接被立即终止。如果输出缓存中还有数据要写,QSocket进入QSocket::Closing状态并且等待这些数据被写完。当所有的输出数据被写完,状态被设置为QSocket::Idle并且连接被终止。在这时,delayedCloseFinished() 喜好被发射。
也可以参考state()和bytesToWrite()。
实例:network/clientserver/client/client.cpp、network/httpd/httpd.cpp和network/networkprotocol/nntp.cpp。
从QIODevice中重新实现的。
任何连接或者正在进行的连接被立即关闭,并且QSocket进入HostLookup 状态。当查找成功,它发射hostFound(),开始一个TCP连接并且进入Connecting状态。最后,当连接成功时,它发射connected()并且进入Connected状态。如果在任何一个地方出现错误,它发射error()。
host可以是一个字符串形式的IP地址,也可以是一个DNS名称。如果需要QSocket将会进行一个普通的DNS查找。注意port是本地字节顺序,不像其它库那样。
也可以参考state()。
实例:network/clientserver/client/client.cpp、network/mail/smtp.cpp和network/networkprotocol/nntp.cpp。
在connectToHost()已经被调用并且连接已经被成功建立之后,这个信号被发射。
也可以参考connectToHost()和connectionClosed()。
实例:network/clientserver/client/client.cpp、network/mail/smtp.cpp和network/networkprotocol/nntp.cpp。
当另一端已经关闭这个连接时,这个信号被发射。在连接被关闭之后,读缓存中也许还包含被可读的缓存的输入数据。
也可以参考connectToHost()和close()。
实例:network/clientserver/client/client.cpp和network/networkprotocol/nntp.cpp。
当一个延时的关闭被完成时,这个信号被发射。
如果你调用close()并且输出缓存中还有数据要写,QSocket进入QSocket::Closing状态并且立即返回。然后它将会继续要套接字写知道所有的数据被写完。然后,delayedCloseFinished()信号被发射。
也可以参考close()。
实例:network/clientserver/client/client.cpp和network/httpd/httpd.cpp。
在错误发生之后,信号被发射。参数就是Error的值。
实例:network/clientserver/client/client.cpp和network/networkprotocol/nntp.cpp。
从QIODevice中重新实现的。
也可以参考bytesAvailable()和putch()。
从QIODevice中重新实现的。
在connectToHost()已经被调用并且主机查找已经成功之后,这个信号被发射。
也可以参考connected()。
实例:network/networkprotocol/nntp.cpp。
也可以参考close()。
从QIODevice中重新实现的。
注意Qt总是使用本地字节顺序,也就是在Qt中67就是67,不需要调用htons()。
返回ch,或者如果发生错误,返回-1。
也可以参考getch()。
从QIODevice中重新实现的。
实例:network/networkprotocol/nntp.cpp。
从QIODevice中重新实现的。
也可以参考canReadLine()。
实例:network/clientserver/client/client.cpp、network/httpd/httpd.cpp、network/mail/smtp.cpp和network/networkprotocol/nntp.cpp。
当有进入的数据可以被读取时,这个信号被发射。
每一次有新进入的数据时,这个信号都被发射一次。记住新进入的数据只被报告一次,也就是,如果你没有读取全部数据,这个信号不会被再次发射,除非新的数据到达这个套接字。
也可以参考readBlock()、readLine()和bytesAvailable()。
实例:network/clientserver/client/client.cpp、network/httpd/httpd.cpp、network/mail/smtp.cpp和network/networkpotocol/nntp.cpp。
这允许我们使用QSocket类作为一个其它套接字类型(也就是在Unix下的Unix领域套接字)的包装。
新的设备在被关联到一个QSocket之前应该没有被连接,在设置套接字调用connectToHost()之后进行连接。
如果你继承QSocketDevice并且想使用QSocket应用编程接口,例如,实现Unix领域套接字,这个函数很有用。
在QIODevice中重新实现的。
这个函数通常只能被进入一次(也就是,不是递归调用)。如果参数force为真,这个函数被执行,但是没有readyRead()信号被发射。这种方式对于waitForMore()函数很有用,所以在一个连接到readyRead()信号的槽中调用waitForMore()是可能的。
通常不需要直接操作这个套接字设备,因为这个类对于绝大多数应用程序不需要设置。
也可以参考QSocket::State。
实例:network/clientserver/client/client.cpp和network/networkprotocol/nntp.cpp。
从QIODevice中重新实现的。
如果msecs为-1,这个调用将会不确定地阻塞。
这个一个阻塞调用并且应该在事件驱动的应用程序中避免使用。
返回可以使用的字节数。
也可以参考bytesAvailable()。
实例:network/networkprotocol/nntp.cpp。
从QIODevice中重新实现的。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|