본문 바로가기

리눅스 멀티스레드 파일 공유 프로그램 - 8 본문

개발/개인공부

리눅스 멀티스레드 파일 공유 프로그램 - 8

Seongjun_You 2024. 6. 12. 16:40

간단한 txt파일을 전송해 보았다.

 

void *clientHandler(void *newsocket)
{
    int new_socket = *((int *)newsocket);
    char buffer[BUFFER_SIZE];
    string str_buffer;
    int valread = recv(new_socket, buffer, BUFFER_SIZE, 0);
    str_buffer = string(buffer, valread);

    ifstream input_file("/home/sj/share_file_project/root_file_dir/secret.txt", ios::in | ios::binary);

    if(str_buffer == "1234")
    {
        while(!input_file.eof()){
            input_file.read(buffer, BUFFER_SIZE);
            cout << buffer << endl;
            send(new_socket, buffer, input_file.gcount(), 0);
            memset(buffer, 0, BUFFER_SIZE);
        }
        input_file.close();
    }

    else
    {
        str_buffer = "Failed";
        send(new_socket, str_buffer.c_str(), str_buffer.length(), 0);
    }

    // 소켓 종료
    close(new_socket);
}

서버의 스레드 함수이다.

ifstream 클래스를 이용해 파일을 읽어드리고

클라이언트로 보낸다.

gcount는 데이터의 크기를 의미한다.

 

 

ofstream output_file("received_file.txt", ios::out | ios::binary);
    
    int valread = 0;
    while((valread = read(sock, buffer, BUFFER_SIZE)) > 0)
    {
        output_file.write(buffer, valread);
        memset(buffer, 0 ,BUFFER_SIZE);
    }
    output_file.close();

클라이언트의 파일을 받는 부분이다.

received_file이라는 새로운 파일을 만들어 내용을 넣어줄 것이다.

read로 읽고 valread로 길이를 반환받아 사용해 준다.

 

파일이 만들어진 모습이다.

Comments