Как прочитать данные отправленные на комп через broadcast рассылку в локальной сети без сервера?

У меня есть локальная сеть (ethernet)состоящая из большого количества хостов, интернета нет. Мне нужно написать программу которая будет рассылать на все компы сообщения используя широковещательную(broadcast) рассылку. Сервер мне писать не надо(мне так сказали). Я набросал код:

#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int main() {
    // Инициализация Winsock
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cerr << "WSAStartup failed!" << std::endl;
        return 1;
    }

    // Создание сокета
    SOCKET broadcastSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (broadcastSocket == INVALID_SOCKET) {
        std::cerr << "Failed to create socket!" << std::endl;
        WSACleanup();
        return 1;
    }

    
    int broadcastEnable = 1;
    if (setsockopt(broadcastSocket, SOL_SOCKET, SO_BROADCAST, (char*)&broadcastEnable, sizeof(broadcastEnable)) < 0) {
        std::cerr << "Failed to set socket options!" << std::endl;
        closesocket(broadcastSocket);
        WSACleanup();
        return 1;
    }

    // Настройка адреса для broadcast
    sockaddr_in broadcastAddress;
    broadcastAddress.sin_family = AF_INET;
    broadcastAddress.sin_port = htons(12345); // Порт для отправки
    broadcastAddress.sin_addr.s_addr = INADDR_BROADCAST;

    // Сообщение для отправки
    const char* message = "helloworld!";
    int messageLength = strlen(message);

    // Отправка сообщения
    if (sendto(broadcastSocket, message, messageLength, 0, (sockaddr*)&broadcastAddress, sizeof(broadcastAddress)) < 0) {
        std::cerr << "Failed to send broadcast message!" << std::endl;
        closesocket(broadcastSocket);
        WSACleanup();
        return 1;
    }

    std::cout << "Broadcast message was sent!" << std::endl;

    // Закрытие сокета
    closesocket(broadcastSocket);
    WSACleanup();
    return 0;
}

Но я абсолютно не понимаю каким образом компы должны получать сообщения если мне не нужно писать сервер, как мне увидеть дошло ли сообщение и работает ли программа вообще? Я почитал что в Линуксе есть netcat которая вроде читает определенный порт, а что мне с виндой делать?


Ответы (0 шт):