Передача данных из приложения c++ в приложение JavaScript и наоборот
мне понадобилось передавать данные из одного приложения в другое. Оба приложения находятся и выполняются на одном пк. Объем данных в среднем около 5 мб. Соединение должно быть двухсторонним. Можете, пожалуйста, предложить способ передачи данных и какой-нибудь минимально рабочий код.
Ответы (2 шт):
Автор решения: Deniska SosiSka
→ Ссылка
- WebSocket - это протокол двухстороннего обмена сообщениями в реальном времени через TCP соединение. (C++, JS)
- gRPC - это высокопроизводительный открытый фреймворк для построения RPC-приложений. (C++, JS)
- IPC - это общий термин для описания методов обмена данными между процессами. Этот термин подразумевает множество различных средств, с лёту вот отличая библиотека для ноды (JS), так-же к этому относятся различные брокеры, очереди, записи в базы и файлы
Автор решения: Огль
→ Ссылка
Ответ на вопрос
Через использование WebSocket. Ниже приведен пример кода для подключения программ, но без отправки данных
С++
include <iostream>
#include <WinSock2.h>
#include <WS2tcpip.h>
#define _WIN32_WINNT 0x501
#pragma comment(lib, "Ws2_32.lib")
using std::cerr;
int main()
{
setlocale(LC_ALL, "Russian");
std::cout << "Start\n";
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0) {
std::cout << "WSAStartup failed: " << result << "\n";
return result;
}
struct addrinfo* addr = NULL;
struct addrinfo hints;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
result = getaddrinfo("127.0.0.1", "8000", &hints, &addr);
if (result != 0) {
std::cout << "getaddrinfo failed: " << result << "\n";
WSACleanup();
return 1;
}
int listen_socket = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
if (listen_socket == INVALID_SOCKET) {
std::cout << "Error at socket: " << WSAGetLastError() << "\n";
freeaddrinfo(addr);
WSACleanup();
return 1;
}
result = bind(listen_socket, addr->ai_addr, (int)addr->ai_addrlen);
if (result == SOCKET_ERROR) {
std::cout << "bind failed with error: " << WSAGetLastError() << "\n";
freeaddrinfo(addr);
closesocket(listen_socket);
WSACleanup();
return 1;
}
if (listen(listen_socket, SOMAXCONN) == SOCKET_ERROR) {
std::cout << "listen failed with error: " << WSAGetLastError() << "\n";
closesocket(listen_socket);
WSACleanup();
return 1;
}
int client_socket = accept(listen_socket, NULL, NULL);
std::cout << "Подключение устоновленно";
if (client_socket == INVALID_SOCKET) {
std::cout << "accept failed: " << WSAGetLastError() << "\n";
closesocket(listen_socket);
WSACleanup();
return 1;
}
}
javascript
const connection = new WebSocket("ws://localhost:8000/")
connection.onopen = (event) => {
console.log("Connection opened");
};
// если возникла ошибка
connection.onerror = (error) => {
console.log(`WebSocket Error: ${error}`);
};