>> Edit article
이름
제목
패스워드
안녕하세요.. 네트워크 프로그래밍을 이제 막시작했습니다.. telnet으로 적속하면 그냥 hello를 찍기한 하는 간단한 프로그래밍인데.. 소스분석도중...도무지 윈도우에서 씨를 자주썻던 저로써는 이해가 잘 안가네요.. 우선 소스부터 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/wait.h> #define MYPORT 6969 #define BACKLOG 2 main() { int sockfd, new_fd; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size; if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1) { perror("socket"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port= htons(MYPORT); my_addr.sin_addr.s_addr= INADDR_ANY; bzero(&(my_addr.sin_zero),sizeof(my_addr.sin_zero)); if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) { perror("bind"); exit(1); } if(listen(sockfd,BACKLOG) == -1) { perror("listen"); exit(1); } while(1) //<--------- 문제의 부분시작 { sin_size = sizeof(struct sockaddr_in); if((new_fd = accept(sockfd,(struct sockaddr *) &their_addr,&sin_size)) == -1) { perror("accept"); continue; } printf("sever : got connection from %s",inet_ntoa (their_addr.sin_addr));//가장 문제의 부분 if(!fork()) { if(send(new_fd,"hello",6,0)== -1) perror("send"); close(new_fd); exit(0); } close(new_fd); while(waitpid(-1,NULL,WNOHANG) > 0); } } 소스 구조는 정말 간단합니다.. 어떤 클라이언트에서 접속이 오면 클라이언트는 hello를 서버쪽에는 그 클라이언트 주소를 뿌려줍니다. while(1)이기때문에 계속 돌겠죠? 근데 밑에 보면 printf("sever : got connection from %s",inet_ntoa (their_addr.sin_addr)); 이문장이 있는데 이문장을 계속 찍게 되는것 아닌가요? 근데 막상 실행해보면 화면에 아무것도 안뜨고 접속이 있을시에면 주소를 찍는군요.. 평상시 C상식으로는 도무지 이해가 가지 않는데.. 설명좀 해주세요.. 글 읽느라 수고 많으셨습니다..감사합니다.. 좋은하루되세요.
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved