옵션 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //server.c 의 파일 송신 부분 void trans_file (int sd) //sd는 client socket { char buffer[BUFSIZE]; //BUFSIZE는 1024로 define 되어 있음 int fd; //파일 디스크립터 FILE *writefp; //파일 포인터 (파일 디스크립터를 가리키는 포인터) FILE *readfp; //파일 포인터 (소켓을 가리키는 포인터) fd = open("test2.mp4", O_WRONLY|O_CREAT|O_TRUNC); //파일 오픈 writefp = fdopen(fd, "w"); //파일 포인터와 파일 디스크립터 연결 readfp = fdopen(sd, "r"); //파일 포인터와 소켓 연결 int i = 0; while (1) { i++; printf("%d \n", i); //송신 되는지 확인 fgets(buffer,BUFSIZE,readfp); //소켓을 통해 전송된 내용을 buffer에 저장 if (strstr (buffer, "end") == 0) //송신이 끝나면 client가 end 전송 { printf("Transfer completion\n"); break; } fputs(buffer,writefp); //buffer에 저장된 내용을 test2.mp4로 저장 } fclose (writefp); fclose (readfp); return; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | //client.c 파일의 파일 전송 부분 void trans_file(int sd)//sd는 소켓 { int fd; //파일 디스크립터 FILE *readfp; //파일 포인터 (test.mp4를 읽음) FILE *writefp; //파일 포인터 (server로 전송) fd = open("test.mp4", O_RDONLY); //파일 오픈 if (fd == -1) // 에러 처리 { printf("file open error \n"); exit(1); } char buffer[BUFSIZE]; //BUFSIZE는 1024로 define readfp = fdopen(fd, "r"); //파일 포인터와 파일 디스크립터 연결 writefp = fdopen(sd, "w"); //파일 포인터와 소켓 연결 int i = 0; //전송 되나 확인 while(!feof(readfp)) { i ++; printf("%d\n", i); fgets(buffer,BUFSIZE,readfp); //test.mp4 파일을 BUFSIZE만큼 읽음 fputs(buffer,writefp); //buffer 내용을 소켓에 전송 fflush(writefp); } fputs ("end", writefp); //파일 전송이 끝나면 end를 보내 server.c의 반복문 종료 return; } |