>> Delete No. 40279 article
No. [질문]간단한 네트워크프로그래밍입니다

등록 2002-01-20 06:40:00 By localhost     조회 1
이름 networkPGM    

		안녕하세요..
네트워크 프로그래밍을 이제 막시작했습니다..
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