time-wait
nagle 알고리즘
다중접속 서버
fork 함수 - 프로세스를 복제한다
좀비 프로세스 - 프로세스 종료 후 메모리상에서 사라지지 않는 프로세스
시그널 핸들링
프로세스 기반의 다중접속 서버구현
2014년 3월 25일 화요일
2014년 3월 20일 목요일
소켓 프로그램 소스 샘플(서버, 클라이언트)
다음은 간단한 소켓 프로그램 서버와 클라이언트의 소스이다
해보니 그냥 일반 jsp와 다를바 없어 보인다
client source
다 하고 나서 컴파일은
gcc serverHello.c -o server
gcc client.c -o client
이렇게 하고 서버 먼저 실행하고 클라이언트에서 접속해보면 된다
출처 : tcp/ip 소켓 프로그래밍 책에서...
해보니 그냥 일반 jsp와 다를바 없어 보인다
- server source
/* * helloworld_server.c * Written by SW. YOON */ #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_handling(char *message); int main(int argc, char **argv) { int serv_sock; int clnt_sock; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; int clnt_addr_size; char message[]="Hello World!\n"; if(argc!=2){ printf("Usage : %s <port>\n", argv[0]); exit(1); } serv_sock=socket(PF_INET, SOCK_STREAM, 0); /* 서버 소켓 생성 */ if(serv_sock == -1) error_handling("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_port=htons(atoi(argv[1])); if( bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1 ) /* 소켓에 주소 할당 */ error_handling("bind() error"); if( listen(serv_sock, 5)==-1 ) /* 연결 요청 대기 상태로 진입 */ error_handling("listen() error"); for(;;){ clnt_addr_size=sizeof(clnt_addr); clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,&clnt_addr_size); /* 연결 요청 수락 */ if(clnt_sock==-1) error_handling("accept() error"); write(clnt_sock, message, sizeof(message)); /* 데이터 전송 */ printf("Message in server : %s \n", message); close(clnt_sock); /* 연결 종료 */ } return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
client source
/* * helloworld_client.c * Written by SW. YOON */ #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_handling(char *message); int main(int argc, char **argv) { int sock; struct sockaddr_in serv_addr; char message[30]; int str_len; if(argc!=3){ printf("Usage : %s <IP> <port>\n", argv[0]); exit(1); } sock=socket(PF_INET, SOCK_STREAM, 0); /* 서버 접속을 위한 클라이언트 소켓 생성 */ if(sock == -1) error_handling("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(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) /* 서버로 연결 요청 */ error_handling("connect() error!"); str_len=read(sock, message, sizeof(message)-1); /* 데이터 수신 */ if(str_len==-1) error_handling("read() error!"); message[str_len]=0; printf("Message from server : %s \n", message); close(sock); /* 연결 종료 */ return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
다 하고 나서 컴파일은
gcc serverHello.c -o server
gcc client.c -o client
이렇게 하고 서버 먼저 실행하고 클라이언트에서 접속해보면 된다
출처 : tcp/ip 소켓 프로그래밍 책에서...
피드 구독하기:
글 (Atom)
image