1. 작업 환경
- Oracle VM VirtualBox
- ubuntu 22.04
- PuTTY
- 언어 : C
2. 조건
- 실행 방법
* 서버 프로그램 : $./file_server 5000 recv.txt
* 클라이언트 프로그램 : $./file_client 127.0.0.1 5000 file_client.c
- 클라이언트 프로그램에서는 네번째 아그먼트 파일이름 file_client.c을 100 Byte 읽어 전송하고,
서버프로그램은 세 번째 아그먼트 파일이름 recv.txt 파일로 동일한 파일 사이즈로 저장
- 명령행 아그먼트가 조건에 맞지 않을 경우 사용법을 출력
* 서버 프로그램 : Usage : ./server_file <port> <file>
* 클라이언트 프로그램 : Usage : ./client_file <IP> <port> <file>
- 서버 프로그램에서는 저장한 파일이 존재하지 않을 경우 새로 파일을 생성하고, 파일이 존재할 때는 모든 내용을 지우
고 새로 저장, 파일 속성은 644
- 클라이언트 프로그램에서 읽을 파일이 존재하지 않을 경우 perror() 함수를 사용하여 오류 원인 메시지를 출력
* <file> file open error
* open() : No such file or directory
- 모든 시스템 콜 함수는 예외 처리를 반드시 처리하여 에러 메시지를 출력
3. Server 코드 작성
* 깃허브 : https://github.com/Byungeun/file_transfer
- TCP/IP 소캣 프로그래밍에서 사용하는 기본 코드를 활용하여 파일 전송 서버/클라이언트를 코드를 작성
- 사용할 변수 선언
- 조건절 중 우선적으로 아그먼트 수를 확인하고 미충족시 종료하는 코드 작성
- 다음으로는 불필요하게 코드가 실행되지 않도록 콜 함수를 사용해서 파일을 오픈하고, 데이터가 없을시 종료하는
코드 작성
- 아그먼트 수가 충족, 데이터 유무 파악 후 통신을 위한 소캣 함수 부터 작성함
- Server에서 사용자 정의로 수정할때는 accept() 함수 이후 코드를 작성하는데 소켓으로 받아 온 데이터가 존재할 경우,
while문을 활용하여 정해진 데이터 크기에 맞게 파일을 읽고 저장하는 것을 전송 완료시까지 반복하는 코드 작성
- 데이터가 전송될때 마다 출력
4. Client 코드 작성
* 깃허브 : https://github.com/Byungeun/file_transfer
- TCP/IP 소캣 프로그래밍에서 사용하는 기본 코드를 활용하여 파일 전송 서버/클라이언트를 코드를 작성
- 사용할 변수 선언
- 조건절 중 우선적으로 아그먼트 수를 확인하고 미충족시 종료하는 코드 작성
- 다음으로는 불필요하게 코드가 실행되지 않도록 콜 함수를 사용해서 파일을 오픈하고, 데이터가 없을시 종료하는
코드 작성
- 아그먼트 수가 충족, 데이터 유무 파악 후 통신을 위한 소캣 함수부터 작성함
- Client 에서 사용자 정의로 수정할때는 connect() 함수 이후 코드를 작성하는데 오픈한 데이터가 존재할 경우, while문
을 활용하여 정해진 데이터 크기에 맞게 파일을 읽고 완료시까지 반복 전송하는 코드 작성
'C언어' 카테고리의 다른 글
TCP/IP 소켓 프로그래밍 (0) | 2024.10.10 |
---|---|
간단한 파일 복사 유틸리티 구현 (0) | 2024.10.10 |
C언어 연산자 (0) | 2024.10.08 |
C언어 문자열 저장 (2) (1) | 2024.10.08 |
C언어 문자열 저장 (포인터, 배열 포함) (0) | 2024.10.08 |