Network/소켓통신(Linux) 9

멀티스레드 : 리눅스 2

2023.11.19 - [Network/소켓통신(Linux)] - 멀티스레드: 리눅스 1 멀티스레드: 리눅스 1 2023.11.19 - [Network/소켓통신(Linux)] - 멀티스레드 개념 멀티스레드 개념 1. 스레드 기초 1) 소켓 응용 프로그램과 멀티스레드 멀티스레드를 사용하지 않는 경우 문제 두 개 이상의 클라이언트가 서버 kmg0157.tistory.com 2. 멀티스레드 TCP 서버 1) 멀티스레드 TCP 서버 동작 클라이언트가 접속하면 accept() 함수는 클라이언트와 통신할 수 있는 소켓 리턴 클라이언트와 통신을 담당할 스레드를 생성 이때, 스레드 함수에 소켓을 넘겨줌 스레드 함수는 인수로 전달된 소켓을 소켓 타입(정수형)으로 변환하여 저장 getpeername() 함수를 호출하여 클..

멀티스레드: 리눅스 1

2023.11.19 - [Network/소켓통신(Linux)] - 멀티스레드 개념 멀티스레드 개념 1. 스레드 기초 1) 소켓 응용 프로그램과 멀티스레드 멀티스레드를 사용하지 않는 경우 문제 두 개 이상의 클라이언트가 서버에 접속할 수 있으나, 서버가 동시에 두 개 이상의 클라이언트를 서 kmg0157.tistory.com 이전 게시글을 통해 개념 참고 1. 스레드 API 1) 스레드 생성과 종료 리눅스에서 스레드를 생성할 때는 pthread_create() 함수 사용 #include int pthread_create( pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg ) // 성공 시 0, 실..

멀티스레드 개념

1. 스레드 기초 1) 소켓 응용 프로그램과 멀티스레드 멀티스레드를 사용하지 않는 경우 문제 두 개 이상의 클라이언트가 서버에 접속할 수 있으나, 서버가 동시에 두 개 이상의 클라이언트를 서비스 할 수 없음 서버와 클라이언트의 send()와 recv() 호출 순서가 서로 맞아야함 데이터를 보내지 않은 상태에서 양쪽에서 동시에 recv()를 호출하면 교착상태(Deadlock)가 발생 교착상태란 영원히 일어나지 않을 사건을 기다리는 상황 recv()에서 빠져나가지 못하고 send() 를 호출할 수 없어 교착상태가 발생 다중 처리 문제 해결책 서버가 각 클라이언트와 연결하여 통신하는 시간을 짧게 줄임 클라이언트가 데이터를 전송하기 전에 매번 서버에 접속하고, 전송 후에는 곧바로 접속을 끊는 방식 특별한 기법을..

TCP 동작 과정 및 함수 정리

1. TCP 서버 함수 1) 서버 함수 동작 socket() 함수로 소켓을 생성함으로써 사용할 프로토콜을 결정 bind() 함수로 소켓을 지역 IP 주소와 지역 포트 번호를 결정 listen() 함수로 소켓의 TCP 함수를 LISTENING으로 변경 accept() 함수로 클라이언트 접속을 수용하고, 접속한 클라이언트와 통신할 수 있는 새로운 소켓을 생성 이때, 원격 IP 주소와 원격 포트 번호가 결정 send() 함수와 recv() 함수 등의 데이터 전송 함수로 클라이언트와 통신을 수행한 후 close() 함수로 소켓을 종료 새로운 클라이언트 접속이 들어올 때마다 4~5 동작을 반복 2) bind() 함수 소켓의 지역 IP 주소와 지역 포트 번호를 결정 #include #include int bind(..

데이터 전송하기

1. 응용 프로그램 프로토콜과 데이터 전송 1)응용 프로그램 프로토콜(Application Protocol) 응용 프로그램 수준에서 주고받는 데이터의 형식과 의미, 처리 방식을 정의한 프로토콜 표준화 되어 있지 않음 응용 프로그램마다 다르게 정의함 응용 프로그램 프로토콜이 결정되면, 데이터를 정해진 형식과 절차에 따라 주고 받도록 소켓 함수를 이용하여 구현 주고 받을 데이터를 구조체로 표현 그러나 구조체 정의만으로는 데이터 전송 형식을 만족하지 않음 2) 데이터 전송 다음과 같은 추가 정보를 통해 TCP 처럼 메세지 경계를 구분하지 않는 프로토콜을 사용할 때, 응용 프로그램 수준에서 경계를 구분 경계 구분 바이트 정렬 구조체 멤버 맞춤 2. 다양한 데이터 전송 방식 1) 고정 길이 데이터 전송 서버와 클..

TCP 서버 - 클라이언트 구조

1. TCP 서버 - 클라이언트 개념 ▷핵심 동작 과정 서버는 먼저 실행하여 클라이언트가 접속하기를 기다린다(listen). 클라이언트는 서버에 접속(connect)하여 데이터를 보낸다(send). 서버는 클라이언트 접속을 수용하고(accept), 클라이언트가 보낸 데이터를 받아서 처리(recv)한다. 서버는 처리한 데이터를 클라이언트에 보낸다(send). 클라이언트는 서버가 보낸 데이터를 받아서 처리한다(recv). 데이터를 주고받는 과정을 모두 마치면 접속을 끊는다(close). 윈도우에서는 closesocket, 리눅스에서는 close를 사용 TCP 서버 클라이언트의 대표적인 예는, 웹 서버와 웹 브라우저의 동작 과정이다. ▷TCP 서버 - 클라이언트 동작 원리 서버는 소켓을 생성한 후 클라이언트 ..