본문 바로가기

DEVELOPMENT/C/C++

[C/C++] TCP/IP 에코 클라이언트

에코 클라이언트 예제입니다.


에코 서버와 연동 가능합니다.


  1. #define _WINSOCK_DEPRECATED_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <winsock2.h>
  6.  
  7. #define IP "192.168.0.0"
  8. #define PORT 3000
  9. #define BUF_SIZE 1024
  10.  
  11. void ErrorHandling(char* message);
  12.  
  13. int main()
  14. {
  15.     WSADATA wsaData;
  16.     SOCKET hSocket;
  17.     char message[BUF_SIZE];
  18.     int strLen;
  19.     SOCKADDR_IN servAdr;
  20.  
  21.     if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
  22.         ErrorHandling("WSAStartup() error");
  23.  
  24.     hSocket = socket(PF_INET, SOCK_STREAM, 0);
  25.     if(hSocket == INVALID_SOCKET)
  26.         ErrorHandling("socket() error");
  27.  
  28.     memset(&servAdr, 0sizeof(servAdr));
  29.     servAdr.sin_family = AF_INET;
  30.     servAdr.sin_addr.s_addr = inet_addr(IP);
  31.     servAdr.sin_port = htons(PORT);
  32.  
  33.     if(connect(hSocket, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
  34.         ErrorHandling("connect() error");
  35.     else
  36.         puts("Connected..................");
  37.  
  38.     while(1)
  39.     {
  40.         fputs("Input message(Q to quit : ", stdout);
  41.         fgets(message, BUF_SIZE, stdin);
  42.  
  43.         if(!strcmp(message, "q\n") || !strcmp(message, "Q\n"))
  44.             break;
  45.  
  46.         send(hSocket, message, strlen(message)0);
  47.         strLen = recv(hSocket, message, BUF_SIZE-10);
  48.  
  49.         message[strLen] = 0;
  50.         printf("Message from server : %s", message);
  51.     }
  52.  
  53.     closesocket(hSocket);
  54.     WSACleanup();
  55.     return 0;
  56. }
  57.  
  58. void ErrorHandling(char* message)
  59. {
  60.     fputs(message, stderr);
  61.     fputc('\n', stderr);
  62.     exit(1);
  63. }
  64.