소켓 개요
네트워크 통신의 기초를 알아봅니다
소켓 개요은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
소켓이란 무엇인가
소켓은 네트워크 통신의 종단점입니다. POSIX 시스템에서는 읽고 쓸 수 있는 파일 디스크립터이므로 두 프로그램이 네트워크나 같은 컴퓨터를 통해 데이터를 주고받을 수 있습니다.
클라이언트-서버 모델
대부분의 네트워크 앱은 클라이언트-서버 모델을 사용합니다.
- 서버는 주소에 바인딩하고 연결을 기다립니다.
- 클라이언트는 서버에 연결을 시작합니다.
연결되면 양쪽 모두 데이터를 보내고 받습니다.
TCP와 UDP 비교
주요 전송 프로토콜은 두 가지입니다.
- TCP (SOCK_STREAM): 신뢰성 있고 순서가 보장되며 연결 기반입니다.
- UDP (SOCK_DGRAM): 빠르고 비연결형이며 패킷이 손실되거나 순서가 바뀔 수 있습니다.
정확성이 중요하면 TCP를, 지연 시간이 짧은 스트리밍에는 UDP를 사용하십시오.
소켓 생성
socket() 호출은 파일 디스크립터를 반환합니다. 인수는 주소 패밀리(IPv4의 경우 AF_INET), 형식(TCP의 경우 SOCK_STREAM), 프로토콜(기본값은 0)입니다.
/* Conceptual: sockets need a network environment to run */
#include <sys/socket.h>
#include <netinet/in.h>
int create_tcp_socket(void) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
/* fd < 0 means error; check with perror */
return fd;
}소켓 주소 구조체
IPv4 주소는 패밀리, 포트, IP 주소를 담는 struct sockaddr_in으로 표현합니다. 함수는 일반적인 struct sockaddr *를 받으므로 형 변환이 필요합니다.
#include <netinet/in.h>
void fill_addr(struct sockaddr_in *addr, unsigned short port) {
addr->sin_family = AF_INET;
addr->sin_port = htons(port); /* host to network short */
addr->sin_addr.s_addr = INADDR_ANY; /* all interfaces */
}바이트 순서의 중요성
네트워크는 빅 엔디언(네트워크 바이트 순서)을 사용합니다. 다음 함수로 변환하십시오.
htons/htonl호스트에서 네트워크로 변환(숏/롱)ntohs/ntohl네트워크에서 호스트로 변환
포트와 주소는 항상 변환해야 합니다. 그렇지 않으면 엉뚱한 곳과 통신하게 됩니다.
IP 주소 변환
inet_pton은 "127.0.0.1"과 같은 텍스트 IP를 sin_addr에 저장되는 이진 형식으로 변환하고, inet_ntop은 출력할 수 있도록 그 반대 변환을 수행합니다.
#include <arpa/inet.h>
#include <netinet/in.h>
int set_ip(struct sockaddr_in *addr, const char *ip) {
return inet_pton(AF_INET, ip, &addr->sin_addr); /* returns 1 on success */
}서버 호출 순서
TCP 서버는 일반적으로 다음 순서로 호출합니다.
socket()생성bind()주소와 포트에 연결listen()수동 대기 상태로 표시accept()연결 가져오기
클라이언트 호출 순서
TCP 클라이언트는 더 간단합니다.
socket()생성connect()서버 주소에 연결 시도
그다음 같은 디스크립터에서 send와 recv를 사용할 수 있습니다.
송신과 수신
send()와 recv()(또는 일반적인 write()와 read())를 사용하십시오. 두 함수 모두 요청한 것보다 더 적은 바이트를 전송할 수 있으므로 실제 코드에서는 모든 데이터가 처리될 때까지 반복해야 합니다.
반환값은 항상 확인하기
모든 소켓 호출은 실패할 수 있습니다. -1을 반환하면 errno가 설정되므로 perror를 호출해 오류를 보고하십시오. recv가 0을 반환하면 상대편이 연결을 닫았다는 뜻입니다. 견고한 네트워크 코드는 오류 확인에 달려 있습니다.
빠른 확인
소켓 기초에 대한 이해도를 확인해 보십시오.
복습
소켓 프로그래밍의 기초를 배웠습니다.
- 소켓은 네트워크 종단점이자 파일 디스크립터입니다.
- 클라이언트-서버 모델은 신뢰성 있는 TCP 또는 빠른 UDP를 사용합니다.
sockaddr_in을htons및inet_pton과 함께 사용합니다.- 서버: socket, bind, listen, accept. 클라이언트: socket, connect
자주 묻는 질문
“소켓 개요” 강의는 무료인가요?
네 — “소켓 개요” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“소켓 개요”에서 뭘 배우나요?
네트워크 통신의 기초를 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“소켓 개요” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.