왜안될까요 ㅠ0-
실수:인터넷세션,연결된세션,요청핸들; 문자:컨텐츠크기,노는버퍼,추가헤더; 문자:버퍼크기PTR,인덱스PTR,읽은크기PTR; 실수:반환값; 실수:파일핸들,메모리버퍼,버퍼;
문자:URL,연결할곳,개체이름,파일이름; 실수:문자위치; 만일(업로드파일.문자<>"") { 윈인터넷.연결여부:=거짓; // *** 버퍼 잡기! *** // 10 바이트 정도의 버퍼를 잡습니다. 컨텐츠크기 := " "; // 버퍼크기 포인터: 4 바이트 짜리 포인터를 준비합니다. // 10 바이트 잡기 위해, 16진수로 0A00 0000 을 넣는 셈입니다. 버퍼크기PTR := 수문(10)+수문(0)+수문(0)+수문(0); // 10 바이트 // 그냥포인터 함수는 '값'이 0인 포인터를 반환합니다. // 즉 그냥 인자를 채워넣기 위한 수단으로 사용됩니다. 인덱스PTR := 문자열함수.그냥포인터; // 0번 인덱스 읽은크기PTR := 문자열함수.그냥포인터; // 그냥 포인터
인터넷세션 := 창1.인터넷함수2.InternetOpenA("Uploader V1.0",1,"","",0); 만일(인터넷세션 = 0) { 대화창보여("오류","인터넷 세션을 만들 수 없습니다!",ㄷㅇ에러,ㄷㅂ확인); 다운끝:=참; // 상태변경.상태변경; 나가; } 연결된세션 := 창1.인터넷함수2.InternetConnectA(인터넷세션,"서버주소",0,"","",3,0,0); 만일(연결된세션 = 0) { 창1.인터넷함수2.InternetCloseHandle(인터넷세션); 대화창보여("오류","서버에 연결할 수 없습니다!",ㄷㅇ에러,ㄷㅂ확인); 다운끝:=참; //상태변경.상태변경; 나가; } 요청핸들 := 창1.인터넷함수2.HttpOpenRequestA(연결된세션,"POST","upload.php","","","",0,0); 만일(요청핸들 = 0) { 창1.인터넷함수2.InternetCloseHandle(연결된세션); 창1.인터넷함수2.InternetCloseHandle(인터넷세션); 대화창보여("오류","서버에 연결할 수 없습니다. 현재 수정중이거나 오류입니다.",ㄷㅇ에러,ㄷㅂ확인); 다운끝:=참; //상태변경.상태변경; 나가; } 반환값 := 창1.인터넷함수2.HttpSendRequestA(요청핸들,"Content-type: multipart/form-data; boundary=----------AaB03x",0,"Content-Disposition: form-data; name=binary; filename=%s\r\n\r\n",0); 메모리버퍼 := 메모리함수.GlobalAlloc(2,버퍼크기); // 버퍼 크기 8KB // 이동 가능한 메모리는 잠궈서 고정 시켜야 사용할 수 있습니다. // 메모리를 고정시킵니다. 그러면 핸들이 하나 나옵니다. 버퍼 := 메모리함수.GlobalLock(메모리버퍼); 속도검사.제어 := 참; 이전받은크기 := 받은크기; 평균속도 := 0; 평균횟수 := 0; 시간검사.제어 := 참; 받은시간 := 0; 받는크기 := 버퍼크기; 받은크기:=0; 전체크기:=파일크기(업로드파일.문자); 파일핸들:=파일열어(업로드파일.문자, ㅍㅇ읽기 + ㅍㅇ쓰기금지); 되풀이(받은크기 < 전체크기) { // 항상 버퍼 크기만큼 받게 됩니다(현재 8KB로 설정되어있습니다). // 그러나 파일 크기가 항상 8KB로 나누어 떨어지는게 아닙니다. // 따라서 가장 마지막으로 받을 때, 8KB보다 모자란 데이터가 남아있게 됩니다. // 그런데 무시하고 8KB로 받고 8KB로 써버리면 문제가 발생합니다(5초 정도의 딜레이가) // 그래서, 남은 크기를 계산하여 그만큼 받습니다. 만일(받은크기+버퍼크기 > 전체크기) { 받는크기 := 전체크기-받은크기; } // 인터넷에서 파일을 8KB 내려받습니다. 메모리함수._lRead(파일핸들,버퍼,받는크기); 창1.인터넷함수2.InternetWriteFile(요청핸들,버퍼,받는크기,읽은크기PTR); // 내려 받은 만큼 씁니다. // 지금껏 받은 크기를 계산합니다. 받은크기 := 받은크기 + 받는크기; // 진행표시막대를 다시 그립니다. 창1.눈금계0.눈금위치 := 반올림(받은크기/전체크기*100); 같이실행해; 만일(다운로드취소) { 그쳐; } }
// 파일을 다 썼으니 닫습니다. 파일닫아(파일핸들); // 고정된 메모리를 다시 나댕길 수 있는 메모리로 만듭니다. 메모리함수.GlobalUnlock(메모리버퍼); // 그리고 메모리를 할당 해제해버립니다. 메모리함수.GlobalFree(메모리버퍼);
// 인터넷 연결을 끊습니다. 창1.인터넷함수2.InternetCloseHandle(요청핸들); 창1.인터넷함수2.InternetCloseHandle(연결된세션); 창1.인터넷함수2.InternetCloseHandle(인터넷세션); } 아니면 { 문자창보여("파일이 존재하지 않습니다."); 나가; } |