연결형 에코 서버 예제
System Program/socket 2014. 3. 6. 11:461. 서버 프로그램
단순히 클라이언트가 연결을 시도하여 연결이 성사되면 "hellow world from echo server program"
문자를 클라이언트에게 에코한다.
/* * main.c -- C Test App. * * Copyright (C) 2012-2013, 2013 heesoon.kim <chipmaker.tistory.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> int main(int argc, char *argv[]) { struct sockaddr_in server_addr, client_addr; int sockfd, acceptfd; socklen_t server_addrlen, client_addrlen = 0; ssize_t n; char ClientAddrStr[INET_ADDRSTRLEN]; char buffer[128] = "hellow world from echo server program \n"; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("192.168.0.2"); //server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(5000); server_addrlen = sizeof(server_addr); sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sockfd < 0) { perror("socket : "); exit(EXIT_FAILURE); } if(bind(sockfd, (struct sockaddr *)&(server_addr), server_addrlen) < 0) { perror("bind : "); exit(EXIT_FAILURE); } if(listen(sockfd, 5) < 0) { perror("listen : "); exit(EXIT_FAILURE); } while(1) { acceptfd = accept(sockfd, (struct sockaddr *)&(client_addr), &client_addrlen); if(acceptfd < 0) { perror("listen : "); exit(EXIT_FAILURE); } else { // echo fucntion write(acceptfd, buffer, strlen(buffer)); printf("client address = %s \n", inet_ntop(client_addr.sin_family, &(client_addr.sin_addr), ClientAddrStr, INET_ADDRSTRLEN)); close(acceptfd); } } close(sockfd); exit(EXIT_SUCCESS); }
2. 클라이언트 프로그램
telnet 192.168.0.2 5000 으로 동작을 확인할 수 있다.
더 고찰 사항은 서버가 연결해제된 상태에서 연결 시도를 수행할 때 발생하는 시그널 관련하여
클라이언트처리를 확인하기 위해서는 별도의 클라이언트 프로그램 구현이 필요할 것으로 보인다.
'System Program > socket' 카테고리의 다른 글
연결형 서버/클라이언트 예제 (클라이언트 포함) (0) | 2014.03.06 |
---|---|
소켓옵션 (0) | 2014.03.05 |
IP주소 및 포트 정보관련 시스템 함수 (0) | 2014.03.04 |
IP주소 및 포트 관리 (0) | 2014.03.04 |
주소 구조체 (0) | 2014.03.04 |