해바

Lab #15 본문

System Programming

Lab #15

Bacha 2019. 12. 2. 00:00

Socket() 시스템 호출을 이용하여 간단한 메시지를 교환하는 client/server 프로그램을 작성하라 :

  • Domain은 PF_UNIX, socket type은 SOCK_DGRAM, 프로토콜은 0을 이용
  • 교환할 간단한 메시지는 "This is a message from the client"
  • 서버 프로그램은 하단의 serv.c에 나와 있음
  • Client 프로그램을 작성할 것

 

 

// serv.c
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <string.h>
#define NAME "socket"
#define SIZE 1024

main() {
    int sock, length, fromlen;
    struct sockaddr_un name, from;
    char buf[SIZE] = "";

    sock = socket(PF_UNIX, SOCK_DGRAM, 0);
    name.sun_family = PF_UNIX;
    strcpy(name.sun_path, NAME);
    bind(sock, (struct sockaddr*)&name, sizeof(struct sockaddr_un));
    printf("socket -> %s\n", NAME);

    recvfrom(sock, buf, SIZE, 0, (struct sockaddr *)&from, &fromlen);
    printf("->%s\n", buf);

    unlink(NAME);
    close(sock);
}

 

// clnt.c
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#define NAME "socket"
#define SIZE 1024

main() {
    int sock; 
    struct sockaddr_un name;
    char buf[SIZE] = "";

    sock = socket(PF_UNIX, SOCK_DGRAM, 0);
    name.sun_family = PF_UNIX;
    strcpy(name.sun_path, NAME);
    printf("socket -> %s\n", NAME);

    fgets(buf, SIZE, stdin);
    sendto(sock, (const char*)buf, SIZE, 0, (const struct sockaddr *)&name, sizeof(struct sockaddr_un));

    unlink(NAME);
    close(sock);
}

 

 

컴파일 :

%gcc serv.c -o serv

%gcc clnt.c -o clnt

 

실행 :

Terminal 1 : %./serv

Terminal 2 : %./clnt

 

 

client에서 입력 테스트 실행

정상 출력 및 종료 확인

'System Programming' 카테고리의 다른 글

Lab #14  (0) 2019.11.18
Lab #13  (0) 2019.11.18
Lab #12  (0) 2019.11.18
Lab #11  (0) 2019.11.18
Lab #10  (0) 2019.11.18
Comments