티스토리 뷰

/* hello_world_server.c */
/* 아래 소스는 클라이언트로부터 연결 요청이 들어오면 이를 수락하여 서버 연결 소켓을 생성하고 클라이언트 소켓으로 Hello World 메시지를 보내고 연결을 종료하는 소스 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys socket.h>

void error_msg(char *message) ;

int main(int argc, char ** argv)
{
   int serv_sock ;
   int conn_sock ;
   struct sockaddr_in serv_addr ;
   struct sockaddr_in conn_addr ;
   int addr_len ;
   char message[] = "Hello World\n" ;

   if ( argc != 3 )
   {
      printf("Usage : %s <server ip=""> <port>\n", argv[0] ) ;
      exit(1) ;
   }

   serv_sock = socket(PF_INET, SOCK_STREAM, 0);
   
   if ( serv_sock == -1 )
      error_msg ("socket() error!!!") ;

   memset(&serv_addr, 0, sizeof(serv_addr)) ;

   serv_addr.sin_family = AF_INET ;
    //serv_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
   serv_addr.sin_addr.s_addr = inet_addr(argv[1]) ;
   serv_addr.sin_port = htons(atoi(argv[2])) ;
  
   if ( bind(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
      error_msg("bind() error") ;
   
   if ( listen(serv_sock, 5) == -1)
      error_msg ("listen() error!!!") ;
 
   addr_len = sizeof(conn_addr) ;
   
   conn_sock = accept(serv_sock, (struct sockaddr *)&conn_addr, &addr_len) ;
  
   if ( conn_sock == -1 )
      error_msg("accept() error") ;
   
   write(conn_sock, message, sizeof(message)) ;
   close(conn_sock);
   return 0 ;
}

void error_msg(char *message)
{
   fputs(message, stderr) ;
   fputc('\n',stderr);
   exit;
}



/* hello_world_client.c */
/* 아래 소스는 서버에 연결하여 서버 프로그램이 송신한 메시지를 수신하여 출력하고 자신의 클라이언트 소켓을 닫는 소스 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>

void error_msg(char *message);

int main(int argc, char **argv)
{
    int cli_sock ;
    struct sockaddr_in serv_addr ;
    char message[30] ;
    int str_len ;
   
    if ( argc != 3 )
            {
        printf("Usage : %s <IP addr> <Port>\n", argv[0]) ;
        exit(1);

            }
   
    cli_sock = socket ( PF_INET, SOCK_STREAM, 0 );

    if ( cli_sock == -1 )
        error_msg ("socket() error!!!") ;

    memset ( &serv_addr, 0, sizeof(serv_addr) ) ;
 
    serv_addr.sin_family = AF_INET ;
    serv_addr.sin_addr.s_addr = inet_addr(argv[1]) ;

    serv_addr.sin_port        = htons(atoi(argv[2])) ;

    if ( connect(cli_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
        error_msg ("connect() error") ;

    str_len = read(cli_sock, message, sizeof(message) ) ;

    if ( str_len == -1 )
        error_msg ( "read() error" ) ;
   
    message [ str_len ] = 0 ;
    printf("Message from server : %s\n", message ) ;

    close ( cli_sock ) ;
    return ( 0 ) ;    
}

void error_msg ( char * message )
{
    fputs ( message, stderr ) ;
    fputc ( '\n' , stderr ) ;
    exit;
}

댓글