Перенос изображения с клиента Windows на сервер Linux С++Linux

Ответить
Anonymous
 Перенос изображения с клиента Windows на сервер Linux С++

Сообщение Anonymous »

Я пытаюсь отправить снимок экрана из приложения Windows на сервер Linux и сохранить его там. Я продолжаю получать ошибку сегментации (сброс ядра) и не могу «реконструировать изображение», чтобы сохранить его на сервере.
Я попробовал отправить данные изображения в std::vector но я продолжаю получать те же ошибки. Вот как я это делаю на клиенте:
packet = create_packet(packet_action::CLIENT_SUCCESS);
last_timestamp = get_timestamp();
packet.timestamp = last_timestamp;

keybd_event(VK_SNAPSHOT, 0, 0, 0);
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);

std::this_thread::sleep_for(std::chrono::milliseconds(200));

OpenClipboard(NULL);
HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
CloseClipboard();

if (hBitmap == NULL)
{
return 1;
}

CImage image;
image.Attach(hBitmap);
if (FAILED(image.Save(L"D:\\Screenshot.jpg", Gdiplus::ImageFormatPNG)))
{
return 1;
}

user_pass_packet_buffer buf{};
strcpy_s(buf.version, version.c_str());

*(user_pass_packet_buffer*)(packet.buffer) = buf;

if (sendto(sock, (const char*)&packet, sizeof(packet_data), 0, &sock_addr, sock_len) < 0) {
return -1;
}

и вот как я обрабатываю это на сервере:
bool login()
{
packet = create_packet(packet_action::SEND);

if (!handle_packet())
{
logger->warning("Failed to receive key packet from %s", client_ip.c_str());
return false;
}

if (sizeof(user_pass_packet_buffer) > sizeof(packet.buffer))
{
logger->error("Packet buffer size is too small for user_pass_packet_buffer");
return false;
}

user_pass_packet_buffer buf;

memcpy(&buf, packet.buffer, sizeof(user_pass_packet_buffer));
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... x-server-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»