需求

qt 在 tcp 编程时,希望 server 是多连接的,可以同时连接多个 client

解决

服务器接到新客户端连接后,会分配一个 SocketDescriptor, 然后 emit newConnection(), 服务器收到新信息,会 emit readRead(). 但是上面这两个信号都不会传递 SocketDescriptor, 所以无法分辨客户端。

override incomingConnection

重写 incomingConnection 可以获取 socketDescriptor, 然后继承 QTcpSocket 新建一个 tcp 的类,来获取 socketDescriptor. 虽然比较麻烦,但是后面多线程处理会比较方便。

nextPendingConnection

nextPendingConnection 可以获取新连接的客户端,但是也是得不到 SocketDescriptor, 不过可以通过 QTcpSocketpeerAddress()peerPort() 来获取客户端的 ip 和 端口,可以作为分辨客户端的依据。

readyRead

也可以使用 QTcpSocket::readyRead 这个信号来绑定 lambda 接收并回复的表达式。

参考

QT TCP网络编程

QT 之TCP网络编程(非常值得看的一篇博客!)

QT TCP服务端如何判断客户端已断开连接

qt之QAbstractSocket

incomingConnection qtcpsocket

【QT实现TCP数据发送和接收】