• Linux의 Echo Server에 접속할 Client이다.
  • 항상 Server가 먼저 실행된 상태에서 접속해야한다.
  • vi editor로 작성한 다음 아래의 code를 입력한 뒤 저장해 Client 소스 파일을 만든다.
  • gcc를 이용해 Client 소스 파일을 컴파일 하고, Server가 실행된 상태에서 Client를 실행한다.
  •     ex) vi Client.c
  •           source code 입력 후 Shift + Z + Z로 저장.
  •           gcc Client.c -o Client.out

아래는 입력할 source code이다.


#include
<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

#define BUF_LEN 80

int main(int argc, char* argv[]){
    int skt, n, len_in, len_out;
    struct sockaddr_in server_addr;
    char* host_addr;
    char buf[BUF_LEN+1];

    if(argc != 3){
        printf("사용법 : %s ip_address\n", argv[0]);
        return -1;
    }

    host_addr = argv[1];


    if(skt = socket(PF_INET, SOCK_STREAM, 0) < 0){
        printf("소켓 생성실패\n");
        return -1;
    }

    bzero((char *)&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(host_addr);
    server_addr.sin_port = htons(atoi(argv[2]));

    if(connect(skt, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){
        printf("연결 실패\n");
        return -1;
    }

    printf("문자열을 입력하시오: ");

    if(fgets(buf, BUF_LEN, stdin)){
        buf[BUF_LEN] = '\0';
        len_out = strlen(buf);
    }
    else{
        printf("오류\n");
        return -1;
    }

    write(skt, buf, 80);

    printf("서버로부터 되돌아 온 문장: ");

    for(len_in = 0, n = 0; len_in < len_out; len_in += n){
        if((n = read(skt, &buf[len_in], len_out - len_in))<0){
            printf("read 오류\n");
            return -1;
        }
    }

    printf("%s", buf);
    close(skt);

    return 0;
}

'공부 해 Boa요. > Network' 카테고리의 다른 글

동시형 서버  (0) 2006.10.27
Raw Socket  (0) 2006.09.29
Consol Echo Client  (0) 2006.09.27
실전 네트웍 프로그래밍 - 4 - IOCP Echo Server  (0) 2005.06.29
'실전 네트웍 프로그래밍 -3  (0) 2005.06.29

+ Recent posts