1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
/**
* build with gcc -Wall -Wextra main.c -lws2_32 -mno-cygwin
*/
#define IP_LOCAL "192.168.1.21"
#define IP_BROADCAST "224.0.0.1"
#define IP_PORT 7766
int main(void)
{
SOCKET sock = INVALID_SOCKET;
unsigned char ttl = 1;
SOCKADDR_IN from, local;
size_t i;
WSADATA wsa;
/* init winsock2 */
WSAStartup(MAKEWORD(2, 2), &wsa);
/* creation du socket */
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == sock) {
perror("socket");
goto EXIT;
}
/* mise en place du multicast */
if (0 !=
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, &ttl,
sizeof(ttl))) {
perror("setsockopt");
goto EXIT;
}
/* bind sur l'adresse IP de la carte réseau voulue */
local.sin_family = AF_INET;
local.sin_port = htons(IP_PORT);
local.sin_addr.s_addr = inet_addr(IP_LOCAL);
if(0 != bind(sock, (SOCKADDR *) & local, sizeof(local))) {
perror("bind");
goto EXIT;
}
/* un message de test, envoyé plusieurs fois pour avoir une trace dans
l'activité réseau */
from.sin_family = AF_INET;
from.sin_port = htons(IP_PORT);
from.sin_addr.s_addr = inet_addr(IP_BROADCAST);
for (i = 0; i < 1500000; ++i) {
char buff[] = "Hello world";
sendto(sock, buff, sizeof(buff), 0, (SOCKADDR *) & from,
sizeof(from));
}
EXIT:
if(INVALID_SOCKET != sock) {
closesocket(sock);
}
/* fermeture winsock32 */
WSACleanup();
return EXIT_SUCCESS;
} |
Partager