UDP BROADCASTING C언어
2007.05.26 21:15 Edit
// 서버
#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);
}
}
}
- [2011/03/04] 열혈강의 c 도전프로그래밍 two - 3 (2302)
- [2011/02/22] 열혈강의 c 도전프로그래밍 one - 7 (908)
- [2011/02/22] 열혈강의 c 도전프로그래밍 one - 6 (864)
- [2011/02/21] 열혈강의 c 도전프로그래밍 one - 5 (992) *1
- [2011/02/21] 열혈강의 c 도전프로그래밍 one - 4 (840)

- broadcasting , c언어 , UDP , 소스











