본문 바로가기

네트워크 프로그래밍

UDP 에코 서버 구축하기

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<winsock2.h>                                                         

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

 

#define BUFSIZE 30                                                            

void ErrorHandling(char *message);

 

int main(int argc, char **argv)                          

{

           WSADATA     wsaData;                                            

           SOCKET hServSock;                                       

           char message[BUFSIZE];                       

           int strLen;

 

           SOCKADDR_IN servAddr;                       //서버의 주소와 모든정보를 가지고 있는 변수

           SOCKADDR_IN clntAddr;                 //클라이언트 주소와 모든 정보를 가지고 있는 변수

           int clntAddrSize;           

 

           if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) 

                     ErrorHandling("WSAStartup() error!"); 

           hServSock=socket(PF_INET, SOCK_DGRAM, 0);

           if(hServSock ==  INVALID_SOCKET)                              

                     ErrorHandling("socket() error!");              

 

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

           servAddr.sin_family=AF_INET;      

           servAddr.sin_addr.s_addr=htonl(INADDR_ANY);

           servAddr.sin_port=htons(3000);              

          

           if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr))==SOCKET_ERROR)

                     ErrorHandling("bind() error");

 

           while(1){

                     clntAddrSize=sizeof(clntAddr);

                     strLen = recvfrom(hServSock, message, BUFSIZE, 0, (SOCKADDR*)&clntAddr, &clntAddrSize);              

                     sendto(hServSock, message, strLen, 0, (SOCKADDR*)&clntAddr, sizeof(clntAddr));                  

           }

           closesocket(hServSock);

           WSACleanup();

           return 0;

}

void ErrorHandling(char *message)

{

           fputs(message, stderr);

           fputc('\n', stderr);

           exit(1);

}