728x90
소켓 프로그램 예제코드
(출처 : https://reakwon.tistory.com/81)
//excample_scoket_code.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 12346
#define BUF_SIZE 1024
int main(void){
int socket_fd,accepted_fd;
struct sockaddr_in host_addr, client_addr;
socklen_t size;
int recv_length;
char buffer[BUF_SIZE];
socket_fd=socket(PF_INET,SOCK_STREAM,0);
host_addr.sin_family=AF_INET;
host_addr.sin_port=htons(PORT);
host_addr.sin_addr.s_addr=0;
memset(&(host_addr.sin_zero),0,8);
bind(socket_fd,(struct sockaddr *)&host_addr,sizeof(struct sockaddr));
listen(socket_fd,3);
while(1){
size=sizeof(struct sockaddr_in);
accepted_fd=accept(socket_fd,(struct sockaddr *)&client_addr,&size);
send(accepted_fd,"Connected",10,0);
printf("Client Info : IP %s, Port %d\n", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
recv_length=recv(accepted_fd,&buffer,BUF_SIZE,0);
while(recv_length>0){
printf("From Client : %s\n",buffer);
recv_length=recv(accepted_fd,&buffer,BUF_SIZE,0);
}
close(accepted_fd);
}
return 0;
}
해당 코드는 단일(1:1) 소켓 프로그래밍 코드임
( Server <-> Client )
Socket Function
프로토콜 체계(Protocol Family)
socket 함수 첫 번째에 들어가는 인자로 생성되는 소켓이 사용할 프로토콜의 부류 정보를 전달함
이름 | PF(Protocol Family) |
PF_INET | IPv4 인터넷 프로토콜 체계 |
PF_INET6 | IPv6 인터넷 프로토콜 체계 |
PF_LOCAL | 로컬 통신을 위한 UNIX 프로토콜 체계 |
PF_PACKET | Low Level 소켓을 위한 프로토콜 체계 |
PF_IPX | PIX 노벨 프로토콜 체계 |
소켓의 타입
socket 함수 두 번째에 들어가는 인자로 가장 보편적으로 사용되는 타입은 스트림 소켓과 데이터그램 소켓임
Stream Socket : 양방향 통신으로 TCP Protocol을 표준으로 사용하고 있음(연결형)
Datagram Socket : 단방향 통신으로 UDP Protocol을 표준으로 사용하고 있음(비연결형)
프로토콜
socket 함수 세 번째에 들어가는 인자로 '0' 으로 설정하면 시스템이 자동으로 설정함
- bind structure -
주소 체계(Address Famliy)
bind 시 필요한 구조체에 담기는 데이터로 프로토콜 체계와 같은 상수를 가지고 있음
이름 | PF(Protocol Family) |
AF_INET | IPv4 인터넷 프로토콜 체계 |
AF_INET6 | IPv6 인터넷 프로토콜 체계 |
AF_LOCAL | 로컬 통신을 위한 UNIX 프로토콜 체계 |
포트
bind 시 사용할 포트를 설정함
주소
bind 시 사용할 주소, 즉 IP를 설정하며 '0'으로 설정하면 현재 기기의 IP로 자동 설정됨
'Development > C' 카테고리의 다른 글
소켓 프로그래밍을 통한 채팅 프로그램 만들기(1) - 구현 아이디어 및 순서 (0) | 2022.11.29 |
---|