SPRING :: NOTE

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

Development Language/C · C++ · MFC

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

RAYZIE 2016. 6. 9. 18:13
반응형

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


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



#define _WINSOCK_DEPRECATED_NO_WARNINGS
 
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#define IP "192.168.0.0"
#define PORT 3000
#define BUF_SIZE 1024
 
void ErrorHandling(char* message);
 
int main()
{
    WSADATA wsaData;
    SOCKET hSocket;
    char message[BUF_SIZE];
    int strLen;
    SOCKADDR_IN servAdr;
 
    if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
        ErrorHandling("WSAStartup() error");
 
    hSocket = socket(PF_INET, SOCK_STREAM, 0);
    if(hSocket == INVALID_SOCKET)
        ErrorHandling("socket() error");
 
    memset(&servAdr, 0, sizeof(servAdr));
    servAdr.sin_family = AF_INET;
    servAdr.sin_addr.s_addr = inet_addr(IP);
    servAdr.sin_port = htons(PORT);
 
    if(connect(hSocket, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
        ErrorHandling("connect() error");
    else
        puts("Connected..................");
 
    while(1)
    {
        fputs("Input message(Q to quit : ", stdout);
        fgets(message, BUF_SIZE, stdin);
 
        if(!strcmp(message, "q\n") || !strcmp(message, "Q\n"))
            break;
 
        send(hSocket, message, strlen(message), 0);
        strLen = recv(hSocket, message, BUF_SIZE-1, 0);
 
        message[strLen] = 0;
        printf("Message from server : %s", message);
    }
 
    closesocket(hSocket);
    WSACleanup();
    return 0;
}
 
void ErrorHandling(char* message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}


추가 : Error 발생 시


- 프로젝트 -> 속성 -> 구성 -> 모든구성

- 구성속성 -> 링커 -> 입력 -> 추가종속성을 더블클릭 후 "ws2_32lib" 추가

반응형

'Development Language > C · C++ · MFC' 카테고리의 다른 글

[C] TCHAR <-> char 형변환  (0) 2016.06.28
[MFC] 간단한 문자열 자르기  (0) 2016.06.28
[C] winsock2 사용 시 에러 발생  (1) 2016.06.09
[C] inet_addr C4996 에러  (0) 2016.06.09
[C] 비동기식 에코 서버  (0) 2016.06.09
Comments