[c언어] 소켓 프로그래밍
C언어를 이용한 소켓 프로그래밍은 네트워크 통신을 위한 강력한 도구로, 클라이언트와 서버 간의 통신을 구현할 수 있습니다. 이번 포스트에서는 C언어를 사용하여 기본적인 소켓 프로그래밍을 어떻게 하는지 알아보도록 하겠습니다.
목차
소켓이란
소켓은 컴퓨터 네트워크에서 프로세스 간 통신의 종단점을 나타냅니다. 간단히 말해, 소켓은 데이터를 주고받을 수 있는 양 끝점을 의미합니다.
서버 프로그램 작성
서버 프로그램을 작성하기 위해선 일반적으로 아래와 같은 단계를 따릅니다.
#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언어를 사용하여 기본적인 소켓 프로그래밍을 구현할 수 있습니다. 소켓 프로그래밍은 네트워크 응용 프로그램을 개발하는 핵심 기술이므로, 응용 프로그램을 개발하거나 네트워크 통신을 이해하는 데 도움이 될 것입니다.
문의 사항이 있으시다면 언제든지 문의해 주세요.