UDP BROADCASTING C언어

// 서버

#include <stdio.h>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32")
#pragma comment(lib, "wsock32")

#define PORT 7777
#define BUFSIZE 2048

void main(int argc, char *argv[])
{
 WSADATA wsaData;
 SOCKET sockfd;
 struct sockaddr_in servAddr;
 struct sockaddr_in clntAddr;
 char recvBuffer[BUFSIZE];
 int clntLen;
 int recvLen;

 if(WSAStartup(0x202, &wsaData) == SOCKET_ERROR)
 {
  printf("Error occurred in WSAStartup function\n");
  WSACleanup();
  exit(1);
 }

 memset(&servAddr, 0, sizeof(servAddr));

 servAddr.sin_family = AF_INET;
 servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
 servAddr.sin_port = htons(PORT);

 sockfd = socket(AF_INET, SOCK_DGRAM, 0);

 if(sockfd == INVALID_SOCKET)
 {
  perror("sock failed");
  closesocket(sockfd);
  WSACleanup();
  exit(1);
 }

 if(bind(sockfd, (struct sockaddr *)&servAddr, sizeof(servAddr)) == -1)
 {
  perror("bind failed");
  closesocket(sockfd);
  WSACleanup();
  exit(1);
 }

 while(1)
 {
  clntLen = sizeof(clntAddr);

  if((recvLen = recvfrom(sockfd, recvBuffer, BUFSIZE-1, 0, (struct sockaddr *)&clntAddr, &clntLen)) == -1)
  {
   perror("recvfrom failed");
   closesocket(sockfd);
   WSACleanup();
   exit(1);
  }

  recvBuffer[recvLen] = '\0';

  printf("Received: %s\n", recvBuffer);
 }
}




// 클라이언트

#include <stdio.h>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32")
#pragma comment(lib, "wsock32")

#define PORT 7777
#define BUFSIZE 2048

void main(int argc, char *argv[])
{
 WSADATA wsaData;
 SOCKET sockfd;
 SOCKADDR_IN servAddr;
 int so_broadcast;
 int state;
 char sendBuffer[BUFSIZE];

 /*
 if(argc != 2)
 {
  fprintf(stderr, "Usage: %s IP_address\n", "server");
  exit(1);
 }*/

 if(WSAStartup(0x202, &wsaData) == SOCKET_ERROR)
 {
  printf("Error occurred in WSAStartup function\n");
  WSACleanup();
  exit(1);
 }

 memset(&servAddr, 0, sizeof(servAddr));

 servAddr.sin_family = AF_INET;
 servAddr.sin_addr.S_un.S_addr = inet_addr("255.255.255.255"); //inet_addr(argv[1]);
 servAddr.sin_port = htons(PORT);
 
 so_broadcast = true;

 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 state = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (const char *)&so_broadcast, sizeof(so_broadcast));
 
 if(state == INVALID_SOCKET)
 {
  perror("sock failed");
  WSACleanup();
  exit(1);
 }

 strcpy(sendBuffer, "언제까지 그렇게 살텐가? 하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하");
 while(1)
 {
  if(sendto(sockfd, sendBuffer, strlen(sendBuffer), 0, (struct sockaddr *)&servAddr, sizeof(servAddr)) != strlen(sendBuffer))
  {
   perror("sendto failed");
   WSACleanup();
   closesocket(sockfd);
   exit(1);
  }
 }
}



Share
이 글과 관련된 글
  1. [2011/03/04] 열혈강의 c 도전프로그래밍 two - 3 by westcliff (2302)
  2. [2011/02/22] 열혈강의 c 도전프로그래밍 one - 7 by westcliff (908)
  3. [2011/02/22] 열혈강의 c 도전프로그래밍 one - 6 by westcliff (864)
  4. [2011/02/21] 열혈강의 c 도전프로그래밍 one - 5 by westcliff (992) *1
  5. [2011/02/21] 열혈강의 c 도전프로그래밍 one - 4 by westcliff (840)
TAG

Leave Comments

profile

영란, 익수`s thoth

2012.02
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
RSS FEEDATOM FEED
thothPowered by TextyleSponsored by ETNEWS
T-NAVI