• 3695阅读
  • 1回复

[讨论]QTcpServer得到的socket描述符与客户端不一样 [复制链接]

上一主题 下一主题
离线lsj754039701
 

只看楼主 倒序阅读 楼主  发表于: 2016-05-23
  1. 服务器端
  2. class Myserver:public QTcpServer{
  3.        .....
  4. void MyServer::incomingConnection(qintptr descriptor)
  5. {
  6.     socketClients *client = new socketClients(descriptor);      
  7.    qDebug()<<descriptor;  // 输出的值与对应客户端的descriptor不一样[/color]
  8. .......
  9.     clients.append(client);
  10. }
  11. }

  1. 客户端:
  2. class MyClient:public QObject
  3. {
  4. ......
  5.     MyClient(){
  6.     ....
  7.     connect(socket,&QTcpSocket::connected,this,&MyClient::slotConnected);
  8.     }
  9. public slots:
  10.     void slotConnected(){
  11.           qDebug()<<socket->socketDescriptor(); // 输出的值与服务端的descriptor不一样
  12.     }
  13. private:
  14.     QTcpSocket *socket;
  15. }

     我生成了三个MyClient对象,连接后,发现只有第一个连接的对象的socket描述符是服务端和客户端一样,其他两个连接后都不一样,这是为什么......
     希望有大神指点,谢谢。



离线lsj754039701

只看该作者 1楼 发表于: 2016-05-24
补充一下:
       第一次连接后,服务器和客户端的socket描述符都是 14;
       第二次连接,客户端是18,服务器端是20
       第三次连接,客户端是19,服务器端是21

我发现数据的传输都没有问题,但我要用socket描述符在服务器端作唯一标识,判断是哪个客户端发来了消息(或者向某个客户端发送消息),socket描述符不一样可怎么弄.......

       目前我是采取第一次连接后,对客户端传来的socket描述符加二,就可以做到唯一标识了,但总感觉不靠谱好暴力.......
快速回复
限100 字节
 
上一个 下一个