Qt 中 tcp网络编程怎么实现多人通讯

Qt 中 tcp网络编程如何实现多人通讯?
服务器:
// 有新客户连接时进行的处理(糟)
void newConnHandleSlot()
{
  QTcpSocket * tcpSocket= tcpServer->nextPendingConnection();
  connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveDataSlot()));
}

// 有新数据来时进行的处理(糟)
void receiveDataSlot()
{
  if(tcpSocket->bytesAvailable()>0)  // **** 问题在这里  **** //
  {
     // 这里进行读数据操作
     // ...
  }
}

上面 // **** 问题在这里  **** // 标记行中的 tcpSocket 怎么确定是那个客户的 tcpSocket ?
换句话说就是,当有数据过来时(即收到readyRead()信号时)怎么确定用哪一tcpSocket来调用bytesAvailable()读取数据?
------解决方案--------------------
sender()获取发送信号QOjbect,用qobject_cast转成QTcpSocket 就可以了
QObject * QObject::sender() const [protected]

------解决方案--------------------
新写一个类socketToClient
class SocketToClient
{
public:
    setSocket(QTcpSocket * s);   
private:
    QTcpSocket * tcpSocket
private slots:
    void receiveDataSlot(); 
};

setSocket中连接槽
connect  tcpSocket  -> receiveDataSlot

然后在你的newConnHandleSlot()中这样:
QTcpSocket * tcpSocket= tcpServer->nextPendingConnection();
SocketToClient *stc =  new socketToClient;
stc->setSocket(tcpSocket)

------解决方案--------------------
最好用一个表来存储所有的SocketToClient 
发心跳包来管理,上线,下线
------解决方案--------------------
建一个qtcpsocket的list 然后在有连接的时候保存handle 判断handle
------解决方案--------------------
QTcpSocket *connection = qobject_cast<QTcpSocket*>(sender());

根据connection->peerAddress()或者端口啥的,区分数据来自那个客户端