안녕하세요..
네트워크 프로그래밍을 이제 막시작했습니다..
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상식으로는 도무지 이해가 가지 않는데..
설명좀 해주세요..
글 읽느라 수고 많으셨습니다..감사합니다..
좋은하루되세요.