본문 바로가기

네트워크 프로그래밍

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,num=0;

 

           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);              

                     printf("수신번호 : %d\n",num++); 

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

           }         

           WSACleanup();

           return 0;

}

 

void ErrorHandling(char *message)

{

           fputs(message, stderr);

           fputc('\n', stderr);

           exit(1);

}