[c언어] 소켓 프로그래밍

C언어를 이용한 소켓 프로그래밍은 네트워크 통신을 위한 강력한 도구로, 클라이언트와 서버 간의 통신을 구현할 수 있습니다. 이번 포스트에서는 C언어를 사용하여 기본적인 소켓 프로그래밍을 어떻게 하는지 알아보도록 하겠습니다.

목차

  1. 소켓이란
  2. 서버 프로그램 작성
  3. 클라이언트 프로그램 작성
  4. 결론

소켓이란

소켓은 컴퓨터 네트워크에서 프로세스 간 통신의 종단점을 나타냅니다. 간단히 말해, 소켓은 데이터를 주고받을 수 있는 양 끝점을 의미합니다.

서버 프로그램 작성

서버 프로그램을 작성하기 위해선 일반적으로 아래와 같은 단계를 따릅니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    // 소켓 생성
    int server_socket = socket(AF_INET, SOCK_STREAM, 0);
    
    // 소켓 주소 설정
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9002);
    server_address.sin_addr.s_addr = INADDR_ANY;
    
    // 소켓과 주소를 바인딩
    bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address));
    
    // 연결 대기
    listen(server_socket, 5);
    
    // 클라이언트와 연결
    int client_socket = accept(server_socket, NULL, NULL);
    
    // 데이터 전송 및 수신
    char data[256] = "Hello, client!";
    send(client_socket, data, sizeof(data), 0);
    
    recv(client_socket, data, sizeof(data), 0);

    // 연결 닫기
    close(server_socket);

    return 0;
}

클라이언트 프로그램 작성

클라이언트 프로그램은 아래와 같은 형태를 가질 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    // 소켓 생성
    int client_socket = socket(AF_INET, SOCK_STREAM, 0);

    // 서버 주소 설정
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9002);
    server_address.sin_addr.s_addr = INADDR_ANY;

    // 서버에 연결
    connect(client_socket, (struct sockaddr*)&server_address, sizeof(server_address));

    // 데이터 송수신
    char data[256];
    recv(client_socket, data, sizeof(data), 0);

    char server_response[256];
    sprintf(server_response, "Server: %s", data);
    send(client_socket, server_response, sizeof(server_response), 0);

    // 소켓 닫기
    close(client_socket);

    return 0;
}

결론

이렇게하면 C언어를 사용하여 기본적인 소켓 프로그래밍을 구현할 수 있습니다. 소켓 프로그래밍은 네트워크 응용 프로그램을 개발하는 핵심 기술이므로, 응용 프로그램을 개발하거나 네트워크 통신을 이해하는 데 도움이 될 것입니다.

문의 사항이 있으시다면 언제든지 문의해 주세요.