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.