Example #1
0
void ConnectionServer::handleNewConnection()
{
    QLocalSocket *localSocket(nextPendingConnection());

    ipcClientProxies.emplace_back(ipcServer, localSocket);

    ipcServer->addClient(&ipcClientProxies.back());

    localSockets.push_back(localSocket);

    emit newConnection();
}
Example #2
0
/*1 
    Sending message to another running instance of application
    \param message String dended message
    \tryitn bool Return status ofsending message process
 */
bool SingleApp::sendMessage(const QString &message)
{
        if (!runned)
                return false;
        QLocalSocket localSocket(this);
        localSocket.connectToServer(uniqueKey, QIODevice::WriteOnly);
        if (!localSocket.waitForConnected(timeout))
        {
                qDebug("%s",qPrintable(localSocket.errorString().toLatin1()));
                return false;
        }
        localSocket.write(message.toUtf8());
        if (!localSocket.waitForBytesWritten(timeout))
        {
                qDebug("%s",qPrintable(localSocket.errorString().toLatin1()));
                return false;
        }
        localSocket.disconnectFromServer();
        return true;
}
Example #3
0
void run( int argc, char** argv ) {

    setlocale( LC_ALL, "Russian" );
    setlocale( LC_NUMERIC, "C" );


    ba::io_service::work  work( io_service() );

    boost::thread  thread( boost::bind(
        &ba::io_service::run,
        &io_service()
    ) );


    // параметры подключения
    const auto localAddress =
        ba::ip::address::from_string( argv[ 1 ] );
    const auto localPort =
        boost::lexical_cast< size_t >( argv[ 2 ] );
    const auto remoteAddress =
        ba::ip::address::from_string( argv[ 3 ] );
    const auto remotePort =
        boost::lexical_cast< size_t >( argv[ 4 ] );
    std::cout <<
        "local \t" << localAddress  << ":" << localPort  << std::endl <<
        "remote\t" << remoteAddress << ":" << remotePort << std::endl;


    // слушатель локального адреса
    const ba::ip::tcp::endpoint  localEP( localAddress, localPort);
    ba::ip::tcp::acceptor  listen( io_service(), localEP );
    ba::ip::tcp::socket    localSocket( io_service() );
    listen.accept( localSocket );

    // удалённое соединение
    const ba::ip::tcp::endpoint  remoteEP( remoteAddress, remotePort);
    ba::ip::tcp::socket  remoteSocket( io_service() );
    remoteSocket.open( remoteEP.protocol());
    remoteSocket.connect( remoteEP );

    // слушаем локальное соединение
    localSocket.async_receive(
        ba::buffer( localData, 1024 ),
        boost::bind(
            handleRead,
            boost::ref( localSocket ),
            boost::ref( remoteSocket),
            localData,
            ba::placeholders::bytes_transferred,
            ba::placeholders::error
    ) );

    // слушаем удалённое соединение
    remoteSocket.async_receive(
        boost::asio::buffer( remoteData, 1024 ),
        boost::bind(
            handleRead,
            boost::ref( remoteSocket),
            boost::ref( localSocket ),
            remoteData,
            ba::placeholders::bytes_transferred,
            ba::placeholders::error
    ) );


    // отправляем тестовые данные
    {
        ba::io_service  io;
        ba::ip::tcp::socket  sa( io );
        const std::string request = "test data";
        ba::write( sa, boost::asio::buffer( request.c_str(), request.length() ) );
    }


    thread.join();
}