[Part 1] 소켓 프로그래밍 시작하기 - 파일목록 받기

이유진·2023년 11월 22일
0

TCP 통신

목록 보기
2/2

hello_server.c


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

#define PORT 9000
#define BUFSIZE 1024

char err_1[] = "Directory Error";
char rBuffer[BUFSIZE];

int main() {
    int c_socket, s_socket;
    struct sockaddr_in s_addr, c_addr;
    int len, length;
    int n;

    DIR *dp;
    struct dirent *dir;

    s_socket = socket(PF_INET, SOCK_STREAM, 0);

    memset(&s_addr, 0, sizeof(s_addr));
    s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    s_addr.sin_family = AF_INET;
    s_addr.sin_port = htons(PORT);

    if (bind(s_socket, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1) {
        printf("Can not Bind\n");
        return -1;
    }

    if (listen(s_socket, 5) == -1) {
        printf("listen Fail\n");
        return -1;
    }

    while (1) {
        len = sizeof(c_addr);
        c_socket = accept(s_socket, (struct sockaddr *)&c_addr, &len);

        if ((dp = opendir(".")) == NULL) {
            write(c_socket, err_1, strlen(err_1));
            close(c_socket);
        } else {
            while ((dir = readdir(dp)) != NULL) {
                if (dir->d_ino == 0) continue;

                write(c_socket, dir->d_name, strlen(dir->d_name));
                write(c_socket, "\n", 1); // 파일명 끝에 줄바꿈 추가
            }
            closedir(dp);
            close(c_socket);
        }
    }

    close(s_socket);
    return 0;
}

hello_clinet.c

// hello_client.c

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

#define PORT 9000
#define IPADDR "127.0.0.1"

int main() {
    int c_socket;
    struct sockaddr_in c_addr;
    int n;

    char buffer[BUFSIZ];
    char rcvBuffer[BUFSIZ];

    c_socket = socket(PF_INET, SOCK_STREAM, 0);

    memset(&c_addr, 0, sizeof(c_addr));
    c_addr.sin_family = AF_INET;
    c_addr.sin_port = htons(PORT);

    if (inet_pton(AF_INET, IPADDR, &c_addr.sin_addr) <= 0) {
        printf("Invalid address/ Address not supported\n");
        return -1;
    }

    if (connect(c_socket, (struct sockaddr *)&c_addr, sizeof(c_addr)) == -1) {
        printf("Can not connect\n");
        close(c_socket);
        return -1;
    }

    printf("Enter message: ");
    scanf("%s", buffer);
    buffer[strlen(buffer)] = '\0';
    write(c_socket, buffer, strlen(buffer) + 1);

    while ((n = read(c_socket, rcvBuffer, sizeof(rcvBuffer))) > 0) {
        rcvBuffer[n] = '\0';
        printf("received Data : %s\n", rcvBuffer);
    }

    close(c_socket);
    return 0;
}

profile
안녕하세요

0개의 댓글