#include #include #include #include #include /* ¼öÁ¤»çÇ× : 000.000.000.000 ºÎºÐ¸¸ ¼­¹öÀÇ IP ·Î Àû¾îÁÖ½Ã¸é µË´Ï´Ù. ¾Æ·¡ÀÇ ¼Ò½º´Â Á¦°¡ ¿¾³¯ bit ´Ù´Ò¶§¿¡ TCP ÂÊÀÇ ±âº»°ñ°Ý ¼­¹ö ÂÊÀÔ´Ï´Ù. ±×³É Copy Çϼż­ ¾²½Ã¸é µµÈ÷±¸¿ä¿À, RedHot, Mandrake, Solaris1.x ÀÌ»ó ¹öÁ¯¿¡¼­ ´Ù µ¹¾Æ°©´Ï´Ù. Packet Size : 1024 ·Î Çß½À´Ï´Ù. À̰͵ΠDefine À¸·Î ¸¸µé¾î µÎ¾úÀ¸´Ï±ñ À̺κи¸ ¼öÁ¤ÇÏ½Ã¸é µË´Ï´Ù. */ #define SERVER_PORT 6000 #define SERVER_HOST_ADDR 000.000.000.000 #define MAXLINE 1024 char *pname; int main( int argc, char **argv ) { int sockfd, newsockfd, clilen, childpid; struct sockaddr_in cli_addr, serv_addr; pname = argv[0]; if( ( sockfd = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 ) { perror("¼­¹ö : Socket ERROR"); exit(0); } bzero((char *)&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(SERVER_PORT); if( bind( sockfd, ( struct sockaddr * )&serv_addr, sizeof(serv_addr) ) < 0 ) { perror("¼­¹ö : bind ERROR"); exit(0); } listen( sockfd, 5 ); printf( "server waiting\n" ); while(1) { clilen = sizeof( cli_addr ); newsockfd = accept( sockfd, (struct sockaddr *) &cli_addr, &clilen ); if( newsockfd < 0 ) { perror("¼­¹ö : ACCEPT ERROR"); exit(0); } if( ( childpid = fork() ) < 0 ) { perror("¼­¹ö : Fork Error"); exit(0); } else if( childpid == 0 ) { close(sockfd); str_echo( newsockfd ); exit(0); } close( newsockfd ); } } str_echo( int sockfd ) { int n; char line[MAXLINE]; for(;;) { n = readline( sockfd, line, MAXLINE ); if(n==0) return; else if(n<0) perror("Server:ReadLine Error"); if( writen(sockfd, line, n) != n ) perror("strecho : write error"); } } int readline( register int fd, register char *ptr, register int maxlen ) { int n, rc; char c; for( n = 1; n < maxlen; n++ ) { if( (rc=read(fd, &c, 1)) == 1 ) { *ptr++ = c; if(c == '\n') break; } else if( rc == 0 ) { if( n == 1 ) return(0); else break; } else return(-1); } *ptr = 0; return(n); } int writen( register int fd, register char *ptr, register int nbytes ) { int nleft, nwritten; nleft = nbytes; while( nleft > 0 ) { nwritten = write( fd, ptr, nleft ); if( nwritten <= 0 ) return(nwritten); nleft -= nwritten; ptr += nwritten; } return( nbytes-nleft); }