본문 바로가기

TCP/IP

select 함수 파일 디스크립터의 변화를 확인하는 함수 기본적으로 blocking 함수(확인할 파일 디스크립터에 변화가 생길 때까지 무한 대기) 멀티플렉싱 서버를 구현하기 위한 방법으로 select 함수가 가장 많이 사용되는 방법이고 윈도우즈 시스템에서도 동일한 이름으로 동일한 기능을 하는 함수를 제공하고 있으니 이식성에서도 높은 점수를 줄 수 있다 select 함수를 사용하게 되면, 한 곳에 모아놓은 여러 개의 파일 디스크립터를 동시에 관찰할 수 있다. 수신할 데이터를 지니고 있는 파일 디스크립터가 어떤 것들인지, 데이터를 전송할 경우 블로킹되지 않고 바로 전달 가능한 파일디스크립터는 어떤 것들인지, 그리고 예외가 발생한 파일 디스크립터는 어떤 것들인지 정도가 관찰 내용이 된다. select 함수의 기능과 호출 순서 .. 더보기
멀티플렉싱(multiplexing) 멀티플렉싱은 하나의 전송로를 여러사용자가 동시에 사용해서 효율성을 극대화 하는 것이다. 아날로그 신호들은 보통, 반송파 대역폭이 다른 주파수 대역의 서브 채널들로 나뉘어지는 FDM을 사용하여 다중화되며, 각각은 하나의 신호를 동시에 병렬로 전송한다. 디지털 신호들은 보통, 서로 교호하는 시간 슬롯 동안 다중 신호들이 같은 채널을 통해 전송되는 TDM을 사용하여 다중화된다. 일부 광섬유 네트워크에서, DWDM을 사용하여 다중화된 신호 내에 별개의 빛 파장으로서 다중 신호들이 함께 전송된다. IO멀티플렉싱이란? - 클라이언트와 입/출력하는 프로세스를 하나로 묶어버리는 형식 - 프로세스가 고속의 전송로에 해당 멀티 프로세스와 멀티플렉싱 비교 1. 멀티 프로세스 기반의 서버 - 클라이언트와 서버간의 송수신 데이.. 더보기
프로세스간 통신 멀티 프로세스 이용시 문제점 - 프로세스는 메모리가 독립적으로 존재하기 때문에 메모리를 이용하여 프로세스간 데이터를 주고 받는 것은 불가능 - 해결책 : 서로 독립된 프로세스들이 데이터를 주고받기 위해 운영체제가 ‘파이프’를 제공함 파이프 생성 함수 - 하나의 파이프 및 파이프에 대한 두 개의 파일 디스크립터가 생성 - 하나의 파이프를 프로세스들이 공유한다. #include int pipe(int fd[2]); 성공시 0, 실패시 -1 리턴 - fd : 크기가 2인 int형 배열을 요구 - fd[0] : 함수호출 후 fd[0]에 데이터를 입력받을 수 있는 파일 디스크립터가 담김 (파이프 출구) - fd[1] : 함수호출 후 데이터를 출력할 수 있는 파일 디스크립터가 담김 (파이프 입구) #include .. 더보기
양방향 통신(1:1 대화) talk_server.c #include #include #include #include #include #include #include #include #include #include #define MAXLINE 512 void z_handler();// 시그널 처리 함수 char *escapechar = "exit"; // 종료 문자열 int main(int argc, char *argv[]) { int server_sock; int client_sock; int clntlen; int num; char sendline[MAXLINE]; char recvline[MAXLINE]; int size; pid_t fork_ret; struct sockaddr_in client_addr; struct soc.. 더보기
TCP 클라이언트 소켓 인터페이스를 사용할 때 통신의 단계에 따라 서버와 클라이언트의 사용 방법이 각각 다르므로 클라이언트 및 서버의 구분은 매우 중요하다. 일단 클라이언트부터 알아보자. 클라이언트의 임무는 수동적으로 접속을 기다리고 있는 서버에게 통신을 개시하는 것이다. 전형적인 TCP 클라이언트의 통신은 다음의 4가지 단계를 가진다. 1. socket()를 이용하여 TCP 소켓을 생성 2. connect()를 이용하여 서버와의 연결을 설정 3. send(), recv()를 이용하여 통신을 수행 4. close()를 이용하여 연결을 종료 TCPEchoClient4.c는 IPv4 기반의 TCP에코 클라이언트를 구현한 코드이다. #include #include #include #include #include #include.. 더보기