微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QLocalSocket类

【转自:】http://blog.csdn.net/abby_sheen/article/details/7623647

QLocalSocket类提供了一个本地套接字。

在Windows这是一个命名管道,在Unix下这是一个本地网域套接字。 如果发生错误,socketError()返回错误的类型,errorString()返回错误的描述。 虽然QLocalSocket是一个事件循环使用而设计,它也可以不被如此使用。在这种情况下,您必须使用waitForConnected(),waitForReadyRead(),waitForBytesWritten()和waitFordisconnected()的块,直到操作完成或超时过期。 注意:此功能不支持windows xp之前的windows系统。 ============================================                             函数方法描述 ============================================ QLocalSocket::QLocalSocket ( QObject * parent = 0 ) 创建一个新的本地套接字。 通常使用这样的方式创建: QLocalSocket *mySocket = new QLocalSocket(this); QLocalSocket::~QLocalSocket () 销毁套接字。如有连接,关闭连接。 void QLocalSocket::abort () 终止当前连接,并重置socket。 与disconnectFromServer()不同,abort()是立即关闭socket,并且清除掉写缓存中未处理的数据。 qint64 QLocalSocket::bytesAvailable () const   [virtual] 重新实现 qiodevice::bytesAvailable(). 返回可以读取的input数据的字节数,也就是返回输入缓存的大小。 qint64 QLocalSocket::bytesToWrite () const   [virtual] 重新实现 qiodevice::bytesToWrite(). 返回正在等待被写的数据的字节数,也就是返回输出缓存的大小。 bool QLocalSocket::canReadLine () const   [virtual] 重新实现 qiodevice::canReadLine(). 如果这一次可以从这个套接字中读取一个完整行的文本,返回ture,否则返回false。 注意:如果意外的关闭连接,这个函数将返回false。 void QLocalSocket::close ()   [virtual] 重新实现 qiodevice::close(). 关闭套接字。 清空读缓存。 如果输出缓存是空的,状态被设置成UnconnectedState,连接立即被终止。 如果输出缓存中还有数据要写,socket进入ClosingState状态,当数据写入完成之后,状态被设置成UnconnectedState,终止连接。并发送disconnectFromServer()信号。 void QLocalSocket::connectToServer ( const QString & name,OpenMode openMode = ReadWrite ) 尝试创建一个到name的连接。 The socket以给定的openMode方式开启,并首先进入ConnectingState状态。 然后The socket尝试连接到指定地址或查找到的地址。 最后,如果成功的建立起了连接,QLocalSocket进入ConnectedState状态,并发送connected()的信号。 在这个过程中的任何时候,只要有错误发生,the socket都会发送error()的信号。 void QLocalSocket::disconnectFromServer () 尝试着关闭socket。 如果缓存中仍有等待写入的数据,QLocalSocket将进入ClosingState状态,然后等待,直到所有数据写完, QLocalSocket进入UnconnectedState状态,发送disconnected()信号。 bool QLocalSocket::flush () flush()能够无阻塞的将内部写缓存中的数据尽可能多的写入到socket中。 当有任何数据被写入时,该方法返回值为true,否则返回值为false。 当你需要QLocalSocket立即发送缓存中的数据时,可以调用方法。一次性成功写入多少个字符取决于操作系统。 大多数情况下,你不需要调用方法,因为一旦事件循环得到了控制权之后,QLocalSocket就会自动的开始发送数据。 当没有事件循环时,一般是调用waitForBytesWritten(),而不是直接调用flush()。 QString QLocalSocket::fullServerName () const 返回socket连接到的server path。 注意:返回值因操作系统不同存在差异。 bool QLocalSocket::isSequential () const   [virtual] 重新实现 qiodevice::isSequential(). bool QLocalSocket::isValid () const 当the socket是合法的并且准备好了,该方法返回ture,否则返回false。 注意:the socket进行读,写之前,一定是处于ConnectedState状态。 qint64 QLocalSocket::readBufferSize () const 该方法返回内部读缓存的size。 这个size是在调用read()和readAll()之前,限制client接收数据的大小, 如果读缓存的size是0(认值),意味着读缓存没有size限制,可以确保没有数据丢失。 qint64 QLocalSocket::readData ( char * data,qint64 c )   [virtual protected] 重新实现 qiodevice::readData(). QString QLocalSocket::serverName () const 返回由connectToServer()的参数指定的server的name。 如果没有调用connectToServer(),或者连接失败,返回空字符串。 void QLocalSocket::setReadBufferSize ( qint64 size ) 设置QLocalSocket内部读缓存的字节数。 如果设置了指定的size,QLocalSocket最多只能缓存该size大小的数据。 认的size为0,意味着size没有限制,所有进来的数据都将放在缓存中。 设置size常用于:及时读取数据,或者保护socket免于接收太多数据而造成内存消耗时。 bool QLocalSocket::setSocketDescriptor ( quintptr socketDescriptor,LocalSocketState socketState = ConnectedState,OpenMode openMode = ReadWrite ) 使用本地套接字描述符socketDescriptor完成QLocalSocket的初始化。 socketDescriptor被接受为有效的本地套接字时,返回true,否则返回false。 设置的套接字以给定的openMode方式打开,并进入由socketState指定的状态。 注意:不能使用同一个本地套接字描述符完成两个本地套接字的初始化。 quintptr QLocalSocket::socketDescriptor () const 如果有可用的QLocalSocket对象,则返回本地套接字描述符。否则,返回-1。 当QLocalSocket处于UnconnectedState状态时,本地套接字描述符是无效的。 LocalSocketState QLocalSocket::state () const 返回the socket的状态。 bool QLocalSocket::waitForBytesWritten ( int msecs = 30000 )   [virtual] 重新实现 qiodevice::waitForBytesWritten(). bool QLocalSocket::waitForConnected ( int msecs = 30000 ) 为了使the socket连接上,等待msecs毫秒。 如果连接成功,返回true。连接不成功,返回false。 当返回false时,可以调用error()来获取失败的原因。 当时间超过mescs,连接仍然不成功,则返回false,通过error()可以得到超时错误的信息。 如果msecs==-1,表明调用方法不会超时。 bool QLocalSocket::waitFordisconnected ( int msecs = 30000 ) 见waitForConnected ( int msecs = 30000 )的描述。 bool QLocalSocket::waitForReadyRead ( int msecs = 30000 )   [virtual] 重新实现 qiodevice::waitForReadyRead(). 该方法在数据准备好且发出readyRead()信号之前,是阻塞的。 超时之后,返回超时错误认的msecs是30000毫秒。 当数据准备好了,返回ture;否则返回false。 qint64 QLocalSocket::writeData ( const char * data,qint64 c )   [virtual protected] 重新实现 qiodevice::writeData(). ============================================                        信号(可理解为:cocoa中的notification) ============================================ void QLocalSocket::connected ()   [signal] 调用connectToServer(),并且成功建立了连接之后,发送connected () 信号。 void QLocalSocket::disconnected ()   [signal] 当socket已经被断开后,发送disconnected ()信号。 void QLocalSocket::error ( QLocalSocket::LocalSocketError socketError )   [signal] 当有错误发生时,会发送error()信号。 参数socketError表明错误的类型。 QLocalSocket::LocalSocketError不是注册Metatype类型,所以在队列连接中需要使用Q_DECLARE_MetaTYPE() 和 qRegisterMetaType()注册之。 void QLocalSocket::stateChanged ( QLocalSocket::LocalSocketState socketState )   [signal] 只要QLocalSocket的状态发生改变,就会发送stateChanged()消息。 参数socketState表示新的状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐