Есть ли способ отправить пакет на адрес 255.255.255.255 с помощью TCP? ⇐ C++
Есть ли способ отправить пакет на адрес 255.255.255.255 с помощью TCP?
Я пытался понять широковещательную и многоадресную рассылку и узнал, как с помощью UDP мы можем отправлять широковещательные пакеты на адрес 255.255.255.255. Однако что мы можем сделать, если делаем то же самое через TCP?
Вот мой текущий код:
#include #include #include #include #include #include интервал основной() { const char* BroadcastAddress = "255.255.255.255"; int BroadcastPort = 12345; // Используем определенный номер порта int udpSocket = сокет (AF_INET, SOCK_DGRAM, 0); если (udpSocket == -1) { perror("Не удалось создать сокет"); возврат 1; } // Включаем трансляцию на сокете интервал трансляцииEnable = 1; if (setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)) == -1) { perror("Не удалось включить трансляцию"); // закрыть(udpSocket); возврат 1; } // Устанавливаем адрес назначения структура sockaddr_in BroadcastAddr; memset(&broadcastAddr, 0, sizeof(broadcastAddr)); BroadcastAddr.sin_family = AF_INET; BroadcastAddr.sin_addr.s_addr = inet_addr(broadcastAddress); BroadcastAddr.sin_port = htons (broadcastPort); // Сообщение для трансляции const char* message = "Это широковещательное сообщение"; // Отправляем сообщение на широковещательный адрес if (sendto(udpSocket, message, strlen(message), 0, (struct sockaddr*)&broadcastAddr, sizeof(broadcastAddr)) == -1) { perror("Не удалось отправить широковещательное сообщение"); } // Закрываем сокет закрыть (udpSocket); вернуть 0; } Я попробовал изменить SOCK_DGRAM на SOCK_STREAM, чтобы сделать его TCP-соединением. Запуск программы не отправляет никаких пакетов, как видно из Wireshark, работающего в фоновом режиме, без каких-либо изменений.
Я пытался понять широковещательную и многоадресную рассылку и узнал, как с помощью UDP мы можем отправлять широковещательные пакеты на адрес 255.255.255.255. Однако что мы можем сделать, если делаем то же самое через TCP?
Вот мой текущий код:
#include #include #include #include #include #include интервал основной() { const char* BroadcastAddress = "255.255.255.255"; int BroadcastPort = 12345; // Используем определенный номер порта int udpSocket = сокет (AF_INET, SOCK_DGRAM, 0); если (udpSocket == -1) { perror("Не удалось создать сокет"); возврат 1; } // Включаем трансляцию на сокете интервал трансляцииEnable = 1; if (setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)) == -1) { perror("Не удалось включить трансляцию"); // закрыть(udpSocket); возврат 1; } // Устанавливаем адрес назначения структура sockaddr_in BroadcastAddr; memset(&broadcastAddr, 0, sizeof(broadcastAddr)); BroadcastAddr.sin_family = AF_INET; BroadcastAddr.sin_addr.s_addr = inet_addr(broadcastAddress); BroadcastAddr.sin_port = htons (broadcastPort); // Сообщение для трансляции const char* message = "Это широковещательное сообщение"; // Отправляем сообщение на широковещательный адрес if (sendto(udpSocket, message, strlen(message), 0, (struct sockaddr*)&broadcastAddr, sizeof(broadcastAddr)) == -1) { perror("Не удалось отправить широковещательное сообщение"); } // Закрываем сокет закрыть (udpSocket); вернуть 0; } Я попробовал изменить SOCK_DGRAM на SOCK_STREAM, чтобы сделать его TCP-соединением. Запуск программы не отправляет никаких пакетов, как видно из Wireshark, работающего в фоновом режиме, без каких-либо изменений.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Что правильно по здравому смыслу: (int)blabla * 255.99999999999997 или round(blabla*255)?
Anonymous » » в форуме C++ - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-