QTcpSever & QTcpSocket

一、tcp客户端

建立套接字socket

连接信号与槽函数

disconnect(socket,SIGNAL(readyRead()),this,SLOT(readMessage()));
disconnect(this,SIGNAL(alreadyRead()),this,SLOT(returnMessage()));
disconnect(socket,SIGNAL(connected()),this,SLOT(isConnect()));
disconnect(socket,SIGNAL(disconnected()),this,SLOT(isDisconnect()));
disconnect(socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(isError(QAbstractSocket::SocketError)));

connect(socket,SIGNAL(readyRead()),this,SLOT(readMessage()));
connect(this,SIGNAL(alreadyRead()),this,SLOT(returnMessage()));
connect(socket,SIGNAL(connected()),this,SLOT(isConnect()));
connect(socket,SIGNAL(disconnected()),this,SLOT(isDisconnect()));
connect(socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(isError(QAbstractSocket::SocketError)));

然后

socket->connectToHost();

设置要连接的ip和port

新的连接来之时;先掉用incomingConnection(qintptr handle)处理,之后再调用newConnect()

incomingConnection用于获取handle,获取socket的id

 服务端

tcpSever->listen(QHostAddress::Any,1414)

监听

1 void TcpSever::incomingConnection(qintptr handle)

2 {

3 socket->setSocketDescriptor(handle);

4 } 

[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor)

This virtual function is called by QTcpServer when a new connection is available. The socketDescriptor argument is the native socket descriptor for the accepted connection.

The base implementation creates a QTcpSocket, sets the socket descriptor and then stores the QTcpSocket in an internal list of pending connections. Finally newConnection() is emitted.

Reimplement this function to alter the server's behavior when a connection is available.

If this server is using QNetworkProxy then the socketDescriptor may not be usable with native socket functions, and should only be used with QTcpSocket::setSocketDescriptor().

Note: If another socket is created in the reimplementation of this method, it needs to be added to the Pending Connections mechanism by calling addPendingConnection().

Note: If you want to handle an incoming connection as a new QTcpSocket object in another thread you have to pass the socketDescriptor to the other thread and create the QTcpSocket object there and use its setSocketDescriptor() method.

原文地址:https://www.cnblogs.com/xiaowulang/p/10848830.html