QLocalServer
继承自QObject。
QLocalServer提供了一个基于本地套接字(socket)的服务端(server)。
QLocalServer可以接受来自本地socket的连接。
server通过调用listen(),监听特定的连接。
newConnection()是在每次server与client连接上时所发出的信号。
nextPendingConnection()将等待中的连接当作一个已连接上的QLocalSocket。返回值是指向QLocalSocket的指针,这个QLocalSocket可以与client建立通信。
当发生错误时,serverError() 返回错误的类型,调用errorString()可以获取对错误的描述。
在监听过程中,通过 serverName()可以获取当前server监听的名称。
close()使QLocalServer停止对连接请求的监听。
虽然QLocalServer是为在事件循环中使用而设计出来的,但是在没有事件循环时也是可以使用的。没有事件循环时,你必须使用waitForNewConnection(),它只在以下两种情况下解除阻塞:1)有可用的连接;2)超时。
============================================
函数方法描述
============================================
QLocalServer::QLocalServer ( QObject * parent = 0 )
创建一个新的本地socket的server。
通常使用这样的方式创建:
QLocalServer *myServer = new QLocalServer(this);
QLocalServer::~QLocalServer ()
销毁QLocalServer对象。
如果server正在监听连接,该方法会自动关闭这个监听。
必须在server delete之前将当前处于连接状态的client QLocalSockets断开连接(或者将client的QLocalSockets重定向)。
void QLocalServer::close ()
停止监听连接请求。
该操作不会影响已存在的连接,只是阻止新的连接。
QString QLocalServer::errorString () const
返回值是对serverError()上报的错误的详细描述。
如果错误内容没有适当的描述,则返回值为空字符串。
QString QLocalServer::fullServerName () const
返回server当前所监听的连接的完整路径。
注意:完整路径具有平台差异。
bool QLocalServer::hasPendingConnections () const [virtual]
server有等待中的连接,返回true,否则返回false。
void QLocalServer::incomingConnection ( quintptr socketDescriptor ) [virtual protected]
当一个新的连接可用时,QLocalServer会调用这个虚函数。
参数socketDescriptor是确认连接时的本地套接字描述符。
该方法主要完成:创建一个QLocalSocket,设置好socket描述符,然后将这个QLocalSocket存入到待连接的一张内部列表中。最后发送newConnection()信号。
重写这个方法,可以在有可用连接时,改变server的行为。
bool QLocalServer::isListening () const
server正在监听连接,返回ture,否则返回false。
bool QLocalServer::listen ( const QString & name )
让server去监听名为name的连接请求。如果server此时正处于监听状态,则返回false。
name可以是简单的名字,QLocalServer将决定路径的正确形式。
serverName()返回传递给listen()的name。
通常,你只需要传入类似“foo”的name即可。在Unix上,这个name也可以是一个路径“/tmp/foo”,在windows上name也可以指定为一个管道路径“\\.\pipe\foo”。
注意:在Unix上,如果server没有关闭listen就crash了,会产生一个AddressInUseError的错误。要想再创建一个新的server,就需要移除这个file。在windows上,两个本地server可以同时监听同一个管道,此时连接请求发生时选择的server没有确定性,即会任意的选择server进行连接。
int QLocalServer::maxPendingConnections () const
返回可接受的最大的等待连接数。默认为30。
QLocalSocket * QLocalServer::nextPendingConnection () [virtual]
将下一个等待中的连接作为已连接上的QLocalSocket对象返回。
创建的这个socket被当作是server的后代,这意味着当server被销毁时,socket会被自动删除。
为避免内存浪费,仍然可以在使用完socket之后,显示的删除它。
当没有等待的连接时,调用该函数得到的返回值为0。
bool QLocalServer::removeServer ( const QString & name ) [static]
清除调用listen()失败的server实例。
调用该方法可以避免因先前的server实例未被清理彻底引起的crash。
在windows上,该方法什么都不做;在Unix上,它清除由name指定的socket。
警告:注意不要清除当前正处于运行状态的实例的socket。
QAbstractSocket::SocketError QLocalServer::serverError () const
返回上次发生的错误类型。
没有错误则返回NoError。
QString QLocalServer::serverName () const
如果server当前正在监听连接,则返回server的name。
否则,返回空字符串。
void QLocalServer::setMaxPendingConnections ( int numConnections )
将可接收的最大等待连接数设置为numConnections。
QLocalServer在调用nextPendingConnection()之前,最多只能接受numConnections个连接请求。
注意:尽管QLocalServer在等待的连接数目达到设置的最大值之后将不再接受新的连接请求,但是操作系统仍然会将这些新的连接请求保持在等待队列中,因为这些请求在连接上之后会给客户端发送信号。
bool QLocalServer::waitForNewConnection ( int msec = 0, bool * timedOut = 0 )
为了获得一个可用的连接请求,等待msec毫秒。
如果连接请求可用,返回ture,否则返回false。
操作超时并且timedOut不为0,则将*timedOut设置为ture。
这是一个阻塞调用。它通常用于简单单线程GUI应用程序,因为在该函数返回之前,整个应用程序将停止对其他事件的响应。
waitForNewConnection()大多使用在非事件驱动的应用程序中。
要实现该函数的功能,但又要使之不产生阻塞,参照newConnection ()信号的发送。
如果参数msec为-1,则该函数不超时。
============================================
信号(可理解为:cocoa中的notification)
============================================
void QLocalServer::newConnection () [signal]
每次有可用的新的连接时,就会发出这个信号。