Воскресенье
17-11-2024
20:46
Главная страница
Каталог статей
Информист Приветствую Вас Гость | RSS
Регистрация
Вход
Меню сайта

Категории каталога
Delphi [3]
C++ [5]
Java [28]
программирование на Java
Assembler [4]
Алгоритмы на ассме
C# [1]
Eclipse [1]

Наш опрос
Насколько вам понравился этот сайт
Всего ответов: 545

Копилка
Если вам понравился наш сайт или вы нашли полезную информацию, то у вас есть возможность отблагодарить администрацию.

Начало » Статьи » Programming » C++

UDP broadcast
//---------------------------------------------------sender.c:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
 
 
#define PORT 2080
// #define SRC_ADDR "172.16.1.120"
#define DEST_ADDR "255.255.255.255"
 
int main(int argc, char *argv[])
{
  int sockfd;
  int broadcast=1;
  struct sockaddr_in sendaddr;
  struct sockaddr_in recvaddr;
  int numbytes;
 
  if((sockfd = socket(PF_INET,SOCK_DGRAM,0)) == -1)
  {
  perror("sockfd");
  exit(1);
  }
 
  if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,
  &broadcast,sizeof broadcast)) == -1)
  {
  perror("setsockopt - SO_SOCKET ");
  exit(1);
  }
 
  sendaddr.sin_family = AF_INET;
  sendaddr.sin_port = htons(PORT);
  sendaddr.sin_addr.s_addr = INADDR_ANY;
  memset(sendaddr.sin_zero,'\0',sizeof sendaddr.sin_zero);
 
  if(bind(sockfd, (struct sockaddr*) &sendaddr, sizeof sendaddr) == -1)
  {
  perror("bind");
  exit(1);
  }
 
  recvaddr.sin_family = AF_INET;
  recvaddr.sin_port = htons(PORT);
  recvaddr.sin_addr.s_addr = inet_addr(DEST_ADDR);
  memset(recvaddr.sin_zero,'\0',sizeof recvaddr.sin_zero);
 
  while((numbytes = sendto(sockfd, "abcd", 4 , 0,
  (struct sockaddr *)&recvaddr, sizeof recvaddr)) != -1)
  {
  printf("Sent a packet");
  sleep(1000);
  }
  perror("sendto");
  exit(1);
 
 
  close(sockfd);
 
  return 0;
}
 
//--------------------------------------------------------------receiver.c:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
 
#define PORT 2080
#define DEST_ADDR "255.255.255.255" //broadcast addr
 
int main(int argc, char *argv[])
{
  int sockfd;
  char buf[10];
  struct sockaddr_in sendaddr;
  struct sockaddr_in recvaddr;
  int numbytes;
  int addr_len;
  int broadcast=1;
 
  if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
  {
  perror("socket");
  exit(1);
  }
  if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,
  &broadcast,sizeof broadcast)) == -1)
  {
  perror("setsockopt - SO_SOCKET ");
  exit(1);
  }
 
  printf("Socket created\n");
 
  sendaddr.sin_family = AF_INET;
  sendaddr.sin_port = htons(PORT);
  sendaddr.sin_addr.s_addr = INADDR_ANY;
  memset(sendaddr.sin_zero,'\0', sizeof sendaddr.sin_zero);
 
 
  recvaddr.sin_family = AF_INET;
  recvaddr.sin_port = htons(PORT);
  recvaddr.sin_addr.s_addr = INADDR_ANY;
  memset(recvaddr.sin_zero,'\0',sizeof recvaddr.sin_zero);
  if(bind(sockfd, (struct sockaddr*) &recvaddr, sizeof recvaddr) == -1)
  {
  perror("bind");
  exit(1);
  }
 
 
  addr_len = sizeof sendaddr;
  if ((numbytes = recvfrom(sockfd, buf, sizeof buf, 0,
  (struct sockaddr *)&sendaddr, (socklen_t *)&addr_len)) == -1)
  {
  perror("recvfrom");
  exit(1);
  }
 
  printf("%s",buf);
 
  return 0;
}



Источник: http://www.experts-exchange.com/Networking/Protocols/Transport/UDP/Q_23074851.html
Категория: C++ | Добавил: Judge (30-05-2009)
Просмотров: 3985 | Рейтинг: 3.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Поиск по каталогу
Яндекс


Поиск по Информисту

Наша кнопка


Друзья сайта

Статистика


Copyright MyCorp © 2006Сайт создан в системе uCoz