30 #include <QtNetwork/QNetworkInterface>    31 #include <QtNetwork/QTcpSocket>    32 #include <QtGui/QTransform>    33 #include <opencv2/highgui/highgui.hpp>    40         if (!this->listen(QHostAddress::Any, port))
    42                 UERROR(
"Unable to start the TCP server: %s", this->errorString().toStdString().c_str());
    46         connect(
this, SIGNAL(newConnection()), 
this, SLOT(
addClient()));
    51         QHostAddress hostAddress;
    53         QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
    55         for (
int i = 0; i < ipAddressesList.size(); ++i)
    57                 if (ipAddressesList.at(i) != QHostAddress::LocalHost && ipAddressesList.at(i).toIPv4Address())
    59                         hostAddress = ipAddressesList.at(i).toString();
    65         if (hostAddress.isNull())
    67                 hostAddress = QHostAddress(QHostAddress::LocalHost);
    75         return this->serverPort();
    80         QList<QTcpSocket*> clients = this->findChildren<QTcpSocket*>();
    83                 UINFO(
"TCP server: Publish detected objects");
    85                 QDataStream out(&block, QIODevice::WriteOnly);
    86                 out.setVersion(QDataStream::Qt_4_0);
    91                 out.device()->seek(0);
    92                 out << (quint16)(block.size() - 
sizeof(quint16));
    94                 for(QList<QTcpSocket*>::iterator iter = clients.begin(); iter!=clients.end(); ++iter)
    96                         (*iter)->write(block);
   103         while(this->hasPendingConnections())
   105                 QTcpSocket * client =  this->nextPendingConnection();
   107                 connect(client, SIGNAL(error(QAbstractSocket::SocketError)), 
this, SLOT(
displayError(QAbstractSocket::SocketError)));
   108                 connect(client, SIGNAL(disconnected()), 
this, SLOT(
connectionLost()));
   114         QTcpSocket * client = (QTcpSocket*)sender();
   115         QDataStream 
in(client);
   116         in.setVersion(QDataStream::Qt_4_0);
   118         if (
blockSizes_.value(client->socketDescriptor(), 0) == 0)
   120                 if (client->bytesAvailable() < (int)
sizeof(quint64))
   128         if (client->bytesAvailable() < (int)
blockSizes_[client->socketDescriptor()])
   145                 std::vector<unsigned char> buf(imageSize);
   146                 in.readRawData((
char*)buf.data(), imageSize);
   147                 cv::Mat image = cv::imdecode(buf, cv::IMREAD_UNCHANGED);
   149                 UINFO(
"TCP service: Add %d \"%s\"", 
id, fileName.toStdString().c_str());
   157                 UINFO(
"TCP service: Remove %d", 
id);
   162                 std::vector<unsigned char> buf(
blockSizes_[client->socketDescriptor()]);
   163                 in.readRawData((
char*)buf.data(), 
blockSizes_[client->socketDescriptor()]-
sizeof(quint32));
   164                 cv::Mat image = cv::imdecode(buf, cv::IMREAD_UNCHANGED);
   166                 UINFO(
"TCP service: Detect object");
   171                 UERROR(
"Unknown service type called %d", serviceType);
   176         client->write(QByteArray(ok?
"1":
"0")); 
   183                 case QAbstractSocket::RemoteHostClosedError:
   185                 case QAbstractSocket::HostNotFoundError:
   186                         UWARN(
"CameraTcp: Tcp error: The host was not found. Please "   187                                         "check the host name and port settings.\n");
   189                 case QAbstractSocket::ConnectionRefusedError:
   190                         UWARN(
"CameraTcp: The connection was refused by the peer. "   191                                         "Make sure your images server is running, "   192                                         "and check that the host name and port "   193                                         "settings are correct.");
   204         blockSizes_.remove(((QTcpSocket*)sender())->socketDescriptor());
   205         ((QTcpSocket*)sender())->close();
   206         sender()->deleteLater();
 
QHostAddress getHostAddress() const
TcpServer(quint16 port=0, QObject *parent=0)
void displayError(QAbstractSocket::SocketError socketError)
void detectObject(const cv::Mat &)
static bool in(Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4)
void addObject(const cv::Mat &, int, const QString &)
ULogger class and convenient macros. 
QMap< int, quint64 > blockSizes_
void publishDetectionInfo(const find_object::DetectionInfo &info)