Составители:
Рубрика:
144
В следующем примере Приложение А передаёт Приложению B изображение тремя различными
способами.
11.5.1. Локальные сокеты
Передающее приложение (А) будет играть роль клиента, а принимающее — сервера. Детали
реализации опущены.
Приложение А:
//Создаёт локальный сокет
QLocalSocket socket;
//Соединяется с сервером с указанием его имени
socket.сonnectToServer("img_server" );
//Передаёт данные
//Закрывает сокет
socket.close();
Приложение B:
//Создаёт слушающий сокет
QLocalServer server;
//Настраивает сокет для принятия подключений:
server.listen("img_server" );
//Получает изображение через сокет
//Закрывает сокет
Основные недостатки такого подхода:
1. необходимо понимание концепции сокетов;
2. приложение вынужденно принимает вид клиент-серверного.
11.5.2. Общая память
Рассмотрим тот же пример с использованием общей памяти.
Приложение А:
//Получаем доступ к общей памяти
QSharedMemory memory ("key1 " );
//Подготавливаем данные
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << image;
int size = buffer.size();
if (!sharedMemory.create(size)) {
qDebug() << "Unable to create shared memory segment.";
return;
}
//Защищаем память от записи
memory.lock();
//Записываем данные
char *to = (char*)memory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(memory.size(), size));
//Снимаем защиту
memory.unlock();
Страницы
- « первая
- ‹ предыдущая
- …
- 142
- 143
- 144
- 145
- 146
- …
- следующая ›
- последняя »
