/*============================================================================Name : SoketServer.cAuthor : SeYUNVersion :Copyright : Your copyright noticeDescription : Hello World in C, Ansi-style============================================================================*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#define BUFF_SIZE 1024int main( void){int server_socket;int client_socket;int client_addr_size;struct sockaddr_in server_addr;struct sockaddr_in client_addr;char buff_rcv[BUFF_SIZE+5];char buff_snd[BUFF_SIZE+5];printf("socket 생성 전:\n");/* return 값은 소켓 식별자 이나 -1은 오류 리턴임 */server_socket = socket( PF_INET, SOCK_STREAM, 0);if( -1 == server_socket){printf( "server socket 생성 실패\n");exit( 1);}printf("socket 생성 완료\n");memset( &server_addr, 0, sizeof( server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons( 4000);server_addr.sin_addr.s_addr= htonl( INADDR_ANY);if( -1 == bind( server_socket, (struct sockaddr*)&server_addr, sizeof( server_addr) ) ){printf( "bind() 실행 에러\n");exit( 1);}printf("listen 시작\n");if( -1 == listen(server_socket, 5)){printf( "listen() 실행 실패\n");exit( 1);}while( 1){client_addr_size = sizeof( client_addr);client_socket = accept( server_socket, (struct sockaddr*)&client_addr, &client_addr_size);if ( -1 == client_socket){printf( "클라이언트 연결 수락 실패\n");exit( 1);}read ( client_socket, buff_rcv, BUFF_SIZE);printf( "receive: %s\n", buff_rcv);sprintf( buff_snd, "%d : %s", strlen( buff_rcv), buff_rcv);write( client_socket, buff_snd, strlen( buff_snd)+1); // +1: NULL까지 포함해서 전송close( client_socket);}printf("프로그램 종료\n");}
소켓통신 서버소스
2017. 5. 19. 21:17