본문 바로가기

DEVELOPMENT/C/C++

[C/C++] UDP ECHO SERVER 예제

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <winsock2.h>
  4.  
  5. #define BUF_SIZE 100
  6. #define PORT 3000
  7.  
  8. #pragma comment(lib, "ws2_32.lib")
  9.  
  10. void ErrorHandling(char* message);
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14.     WSADATA wsaData;
  15.     SOCKET servSock;
  16.     char message[BUF_SIZE];
  17.     int strLen;
  18.     int clntAdrSz;
  19.  
  20.     SOCKADDR_IN servAdr, clntAdr;
  21.  
  22.     if (WSAStartup(MAKEWORD(22), &wsaData) != 0)
  23.         ErrorHandling("WSAStartup() error");
  24.  
  25.     servSock = socket(PF_INET, SOCK_STREAM, 0);
  26.     if (servSock == INVALID_SOCKET)
  27.         ErrorHandling("UDP socket creation error");
  28.  
  29.     memset(&servAdr, 0sizeof(servAdr));
  30.     servAdr.sin_family = AF_INET;
  31.     servAdr.sin_addr.s_addr = htonl(INADDR_ANY);
  32.     servAdr.sin_port = htons(PORT);
  33.  
  34.     if (bind(servSock, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
  35.         ErrorHandling("bind() error");
  36.  
  37.     while (1)
  38.     {
  39.         clntAdrSz = sizeof(clntAdr);
  40.         strLen = recvfrom(servSock, message, BUF_SIZE, 0(SOCKADDR*)&clntAdr, &clntAdrSz);
  41.         sendto(servSock, message, strLen, 0(SOCKADDR*)&clntAdr, sizeof(clntAdr));
  42.     }
  43.  
  44.     closesocket(servSock);
  45.     WSACleanup();
  46.     return 0;
  47.  
  48. }
  49.  
  50. void ErrorHandling(char *msg)
  51. {
  52.     fputs(msg, stderr);
  53.     fputc('\n', stderr);
  54.     exit(1);
  55. }