Change peerName in a TCP client/server connection
Good morning to all.
I'm working on a job that establish a TCP connection between a server and some clients.
The clients are some DTUs, and their firmware is provided from the seller.
When I lauch the server, the connection is set correctly. When I search for peerName, peerAddress and peerPort I have an undefined value for peerName.
So, I'm trying to change the peer name using protected function QAbstractSocket::setPeerName(QString), as in this snippet:
// snippet code
QtcpServer* tcpServer = new QTcpServer;
QTcpSocket* tmp = new QTcpSocket;
tmp = tcpServer->nextPendingConnection(); QString aa = tmp->peerAddress().toString(); QString bb = tmp->peerName(); QString cc = QString::number(tmp->peerPort()); QMessageBox::warning(this, "New client: ", bb + "* - "+ aa + ":" + cc);
Here bb is an empty string. So, I called the following method:
The compiler give me this error:
error: ‘void QAbstractSocket::setPeerName(const QString&)’ is protected within this context
How can I solve my problem?
More, can I change the peer name from server side, or I can do it only from client side?
Thanks to all can help me.
So if you really want to call a
protectedmethod in C++ you must write the code in your own class which is derived from the base class. That's what
protectedmeans. In itself this has nothing to do with Qt.
You are delivering the socket you wish to call
setPeerName()on from http://doc.qt.io/qt-5/qtcpserver.html#nextPendingConnection. So you would need to write your own class derived from
QTcpServerwhich at minimum returned its own value for
QTcpSocket, which in turn you would need to derive from you own class for this derived from
QTcpSocket. So I make it you would need two derived classes of your own, one from
QTcpServerand another from
Whether this is the right approach is another matter. It is "somewhat unusual" to need to derive in order to call a
protectedfunction (i.e. you "usually" should not find you are wanting to override a
protectedfunction), but this varies according to your usage....
Thanks for your answer, it was very useful.
Only for comment, I understand that peerName and others 'peer' members aren't needful for my application, so a don't care of them.
I understand (I don't know if it is right) that these class members will be used when I need to establish a peer-to-peer connection, that isn't my goal.