具有多个客户端的QLocalServer—正确处理

我正在尝试使IPC在一台服务器之间工作,以接受来自Qt 4.6的多个客户端的请求。一切正常,除了底层命名管道没有被关闭,使得Qt发出最大句柄到达消息(62)。 由于我想接受多个客户端连接,因此我将处理newConnections到QLocalServer类,如下所示:
void ServerImpl::onNewConnection()
{
    QLocalSocket * plsocket = _server->nextPendingConnection();
    SocketHandler* skh = new SocketHandler(plsocket, this, this);
    connect(plsocket, SIGNAL(readyRead()), skh, SLOT(socketReadyRead()));
    connect(plsocket, SIGNAL(error(QLocalSocket::LocalSocketError)), skh,  
            SLOT(onError(QLocalSocket::LocalSocketError)));
    connect(plsocket, SIGNAL(disconnected()), skh, SLOT(disconnected()));
}
因为每次我获得一个新连接时,从QLocalServer :: nextPendingConnection()接收的QLocalSocket指针都会被覆盖,我通过SocketHandler类来管理数据请求,这当然封装了一个QLocalSocket类:
void SocketHandler::socketReadyRead()
{ 
 QDataStream in(_ps);
 in.setVersion(QDataStream::Qt_4_5);

 forever
 {
  if (_blocksize == 0)
  {
   if (_ps->bytesAvailable() < sizeof(blocksize_t))
    return;

   in >> _blocksize;
  }

  // We need more data?
  if (_ps->bytesAvailable() < _blocksize)
   return;

  _srv->ReadRequest(in);

  // CHECK: Discard remaining blocks
  _blocksize = 0; 
 }
}
这是类声明:
class SocketHandler : public QObject
{
 Q_OBJECT

public:
 SocketHandler(QLocalSocket* ps, ServerImpl* srv, QObject* parent = 0) : 
 QObject(parent), _ps(ps), _blocksize(0), _srv(srv) { };

 virtual ~SocketHandler() {};

public slots:
 void socketReadyRead();
 void onError(QLocalSocket::LocalSocketError);
 void disconnected();

private:

 QLocalSocket*  _ps;
 blocksize_t   _blocksize;
 ServerImpl*  _srv;
};
如上所述,问题是我无法在客户端请求时断开与服务器的连接。我试了QLocalSocket :: close,QLocalSocket :: disconnectFromServer没有运气。 我应该使用多线程解决方案吗? (我认为它不会解决问题)。 我想的另一个解决方案是提供1:1 QLocalServer&lt; - > QLocalSocket IPC机制,而不是试图处理1:N。 提前致谢。     
已邀请:

要回复问题请先登录注册