🧼C, C++/네트워크

소켓 파일전송 C++ #1

Mawile 2020. 10. 6.
728x90

시작하기 앞서서

사용한 운영체제는 Windows10이며

사용된 IDE는 DevCpp이고, 사용한 언어는 C++11입니다!


[[[   참고자료   ]]]

소켓 기본 틀

 

소켓 기본틀

[[[  서버 기본 틀  ]]] #include #include using namespace std; #define PACKET_SIZE 1024 SOCKET skt,client_sock; int main(){ WSADATA wsa; WSAStartup(MAKEWORD(2,2), &wsa); skt = socket(PF_INET,SOCK_S..

mawile.tistory.com

파일 전송 원리

 

[C] 파일 전송(File Transfer) - TCP

1. 구성   TCP 기반의 Socket을 이용한 파일 전송 프로그램입니다. Server Receiver 파라메터 : Client Sender 파라메터 : 다른 언어 다른 방식: https://github.com/cckr2/FileTransfer 2. Source Code(1) -..

twinw.tistory.com


이번에도 늘 그랬다시피 소켓 기본 틀은 저가 위에

참고자료로 올려둔 글에서 따올 겁니다~!

두번째참고자료를 기반으로 저방식대로

코드를 줄이고 최대한 이해가기쉽게 만들었습니다!


[[[   서버(받는사람)   ]]]

int totalNum; //전체다운받은횟수
    int BufferNum=0; //현재다운받은횟수
    int readBytes; //다운받은데이터의크기
    long file_size; //전체파일사이즈
    char buf[PACKET_SIZE]; //데이터를저장할 버퍼
 
    FILE * fp;
    fp = fopen("C:\\(경로)\\file.png", "wb"); //바이너리파일 쓰기형식으로 열기
    recv(client_sock, buf, PACKET_SIZE, 0); //파일사이즈받기 
    file_size = atol(buf); //char->long변환
    totalNum = file_size / PACKET_SIZE + 1;
    //전체사이즈횟수 = 파일전체사이즈 % (1+받고있는데이터)
    while(BufferNum != totalNum){ //만약 전체사이즈횟수와 다운받은횟수가같다면 루프나가기
        readBytes = recv(client_sock, buf, PACKET_SIZE, 0);
        //데이터와 데이터의크기 받기 
        BufferNum++; //1씩더하기
        fwrite(buf, sizeof(char), readBytes, fp);
        //데이터와 데이터의크기만큼 파일쓰기 
    }
fclose(fp); //파일닫기

[[[   클라이언트(보내는사람)   ]]]

int sendBytes; //파일을 읽어와서 사이즈를저장할변수
    long file_size; //파일전체사이즈
    char buf[PACKET_SIZE]; //데이터저장버퍼
    FILE *fp;
    fp = fopen("C:\\(경로)\\file.png", "rb"); //바이너리파일 읽기형식으로 열기 
    fseek(fp, 0, SEEK_END); //끝으로가서 
    file_size = ftell(fp); //사이즈재고 
    fseek(fp, 0, SEEK_SET); //처음으로 다시와서
    snprintf(buf, sizeof(buf), "%d", file_size); //사이즈값을 buf에다가넣기
    send(skt, buf, sizeof(buf), 0); //파일전체 사이즈값전송
    while((sendBytes=fread(buf,sizeof(char),sizeof(buf), fp))>0) send(skt, buf, sendBytes, 0);
    //파일이끝날때까지 읽고 보내고를 반복
	fclose(fp); //파일닫기

전체소스코드는 밑에 깃허브에서 다운받으시구요~~

시연영상도 찍었습니다!

어제 강좌올렸던 리버스쉘강좌는 깜빡하고 시연영상을 못올렸는데

이번꺼는 잘 기억하고 올렸습니다 ㅎㅎ~~


[[[   시연영상   ]]]

 

[[[   다운로드   ]]]

 

DRAGONPROCESS/FileTransfer

Contribute to DRAGONPROCESS/FileTransfer development by creating an account on GitHub.

github.com

 

 

 

[[[   다음글   ]]]

 

 

소켓 파일전송 C++ #2

개발환경 >> DevCpp 언어 >> C++11 운영체제 >> Windows10 [[[  지난글  ]]] 소켓 파일전송 C++ #1 시작하기 앞서서 사용한 운영체제는 Windows10이며 사용된 IDE는 DevCpp이고, 사용한 언어는 C++11입니다! [[[..

mawile.tistory.com

 

728x90

'🧼C, C++ > 네트워크' 카테고리의 다른 글

다중 클라이언트 C++ TCP #1  (0) 2020.10.14
소켓 기본 틀 #2  (1) 2020.10.13
소켓 기본 틀 #1  (0) 2020.10.05
리버스 쉘 Reverse Shell C++  (0) 2020.10.05
실시간 채팅 프로그램 C++ TCP  (6) 2020.10.01

댓글