C 소켓으로 서버 클라이언트 응용 프로그램 생성.
프로젝트를 복제하고 CD를 메인 디렉토리로 가져옵니다.
터미널을 열고 다음 명령으로 서버를 설정하십시오.
./server [port]다음과 같은 결과를 얻을 수 있어야합니다.
Listening on 0.0.0.0:8080그 후이 명령을 사용하여 클라이언트와 서버에 연결합니다.
./client [IP] [port]소켓 프로그래밍은 네트워크에서 두 노드를 연결하여 서로 통신하는 방법입니다. 하나의 소켓 (노드)은 IP의 특정 포트에서 리스팅되고 다른 소켓은 다른 소켓이 연결하여 연결을 형성합니다. 서버는 리스너 소켓을 형성하고 클라이언트는 서버에 도달합니다.
int sockfd = socket ( domain , type , protocol ) int bind ( int sockfd , const struct sockaddr * addr , socklen_t addrlen );소켓을 생성 한 후, 결합 함수는 소켓을 ADDR (사용자 정의 데이터 구조)에 지정된 주소 및 포트 번호에 바인딩합니다. 예제 코드에서 서버를 LocalHost에 바인딩하므로 IP 주소를 지정하기 위해 inaddr_any를 사용합니다.
int listen ( int sockfd , int backlog );서버 소켓을 수동 모드에 넣어 클라이언트가 서버에 접근하여 연결을 대기 할 수 있습니다. 백 로그는 SOCKFD에 대한 보류중인 연결 대기열이 커질 수있는 최대 길이를 정의합니다. 큐가 가득 차면 연결 요청이 도착하면 클라이언트는 econnrefused를 표시하여 오류를받을 수 있습니다.
int new_socket = accept ( int sockfd , struct sockaddr * addr , socklen_t * addrlen );청취 소켓에 대한 보류중인 연결 대기열에서 첫 번째 연결 요청을 추출합니다. 이 시점에서 클라이언트와 서버간에 연결이 설정되어 데이터를 전송할 준비가되었습니다.
int connect ( int sockfd , const struct sockaddr * addr , socklen_t addrlen );Connect () 시스템 호출은 파일 디스크립터 SOCKFD가 참조하는 소켓을 ADDR이 지정된 주소에 연결합니다. 서버의 주소와 포트는 addr에 지정되어 있습니다.
pthread_t thread_id ;
pthread_create ( & thread_id , NULL , client_handler , ( void * ) & client_socket );pthread를 사용하여 각 클라이언트의 스레드를 생성하고 특정 방법으로 처리합니다.