소켓 프로그래밍

소켓 프로그래밍 (1) 네트워크 프로그래밍과 소켓의 이해

ddanss 2018. 9. 29. 00:59
728x90

소켓 생성함수

#include<sys/socket.h>

int socket(int domain, int type, int protocol);

-> 성공 시 파일 디스크립터, 실패시 1 반환

-> Socket이라는 함수가 소켓을 생성하는구나.

 

bind 함수

#include<sys/socket.h>

int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);

-> 성공시 0, 실패 시 1 반환

-> IP, 포트번호, 소켓의 주소정보를 할당.

 

listen 함수

#include<sys/socket.h>

int listen(int sockfd, int backlog);

-> 소켓을 연결요청이 가능한 상태가 되게 함.

 

accept 함수

#include<sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

-> 성공 시 파일 디스크립터, 실패시 1반환

 

소켓의 생성과정

소켓 생성 (socket함수 호출)

IP주소와 PORT번호 할당 (bind함수 호출)

연결요청 가능상태로 변경 (listen함수 호출)

연결요청에 대한 수락(accept함수 호출)

 

server : 연결요청을 수락하는 기능의 프로그램

 

서버 소켓 or 리스닝 소켓 : 서버 프로그램에서 생성한 소켓

 

클라이언트 소켓

#include<sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);

-> 성공 시 0, 실패 시 1 반환

 

클라이언트 소켓 생성 과정

socket 함수 호출을 통한 소켓의 생성

connect 함수 호출을 통한 서버로의 연결요청 과정

 

파일 디스크립터

0 : 표준 입력 Standard Input

1 : 표준 출력 Standard Output

2 : 표준 에러 Standard Error

 

파일 열기

#include<sys/types.h>
#include<sys/stat.h>

#include<fcntl.h>

int open(const char*path, int flag);

-> 성공 시 파일 디스크립터, 실패시 1 반환

-> path : 파일 이름을 나타내는 문자열의 주소 값 전달

-> flag : 파일의 오픈 모드 정보(파일의 특성 정보)

-> flag에 전달할 수 있는 값과 그 의미

-> (1) O_CREAT : 필요하면 파일을 생성

-> (2) O_TRUNC : 기존 데이터 전부 삭제

-> (3) O_APPEND : 기존 데이터 보존하고, 뒤에 이어서 저장

-> (4) O_RDONLY : 읽기 전용으로 파일 오픈

-> (5) O_WRONLY : 쓰기 전용으로 파일 오픈

-> (6) O_RDWR : 읽기, 쓰기 겸용으로 파일 오픈

 

파일 닫기

#include <unistd.h>

int close(int fd);

-> 성공 시 0, 실패 시 1반환

-> 파일은 사용 후 반드시 닫아줘야 한다.

-> 파일뿐만 아니라 소켓을 닫을 때도 사용된다.

-> 여기서 파일과 소켓을 구분하지 않는다는 리눅스 운영체제의 특성을 볼 수 있다.

 

파일에 데이터 쓰기

#include <unistd.h>

ssize_t write(int fd, const void * buf, size_t nbytes);

-> 성공 시 전달한 바이트 수, 실패 시 1 반환

-> fd : 데이터 전송대상을 나타내는 파일 디스크립터 전달

-> buf : 전송할 데이터가 저장된 버퍼의 주소 값 전달

-> nbytes : 전송할 데이터의 바이트 수 전달

 

파일에 저장된 데이터 읽기

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t nbytes);

-> 성공 시 수신한 바이트 수(단 파일의 끝을 만나면 0), 실패 시 1 반환

-> fd : 데이터 수신대상을 나타내는 파일 스크립터 전달

-> buf : 수신한 데이터를 저장할 버퍼의 주소 값 전달

-> nbytes : 수신할 최대 바이트 수 전달

 

반응형