void ConnectionServer::handleNewConnection() { QLocalSocket *localSocket(nextPendingConnection()); ipcClientProxies.emplace_back(ipcServer, localSocket); ipcServer->addClient(&ipcClientProxies.back()); localSockets.push_back(localSocket); emit newConnection(); }
/*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; }
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(); }