Skocz do zawartości

[39dll] Transfer plików


Rekomendowane odpowiedzi

Otóż dziś sobie przeglądam skrypty 39dll i jest dużo takich, które nie wiem jak działają. I mi mówiliście, że transfer pliku to po kolei bajty wysyłać.. i tu się chyba mylicie, a mianowicie (rym :)) :

GML
fileopen()

fileclose()

filewrite()

fileread()

filepos()

filesetpos()

filesize()

Czyli twórca/y 39dll o tym pomyśleli - o transferze plików.

Wie może ktoś jak się tego używa? Myślę, że chyba tak samo jak file_bin.. , ale nie wiem. No i jak ktoś się orientuje to niech powie jak to działa..

Odnośnik do komentarza
Udostępnij na innych stronach

Nie dokładnie, to o co ci chodzi, ale masz skrypt na pobieranie z linku, sorry że angielskie wyjaśnienia :/

 

GML
/*

argument0 = url to download from

argument1 = local file to save as

returns the error code from the server. 200 is a succesful download.

 

NOTE: urls with usernames and passwords do not work.

*/

var server, file, i, port, tcp, endloop, url, error;

server = "";

file = "/"

port = 80;

i = 0;

error = 200;

 

if(string_pos("http://", argument0) == 1)argument0 = string_delete(argument0, 1,7)

//get file part of url

i = string_pos("/", argument0);

if(i)

{

file = string_copy(argument0, i, string_length(argument0)-i+1);

argument0 = string_delete(argument0, i, string_length(file));

}

//get port part

i = string_pos(":", argument0);

if(i)

{

port = real(string_copy(argument0, 1, i-1));

argument0 = string_delete(argument0, 1, i);

}

//get server part

server = argument0;

 

 

//the code above interpretes the url into a server variable, file variable and port.

tcp = tcpconnect(server, port, 0);

if(!tcp)return false;

setformat(tcp, 1, chr(13) + chr(10)); //set format to text mode to receive one line at a time.

//send get request

clearbuffer();

writechars("GET " + file+ " HTTP/1.1" + chr(13) + chr(10));

writechars("Host: " + server + chr(13) + chr(10));

writechars("Connection: close"+chr(13) + chr(10));

writechars("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-alambik-script, application/x-alambik-alamgram-link, */*"+chr(13)+chr(10));

writechars("Accept-Language: en-us"+chr(13) + chr(10));

writechars("User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)"+chr(13) + chr(10));

sendmessage(tcp);

//receive file header

//interpret header for any errors.

endloop = false;

while(!endloop)

{

receivemessage(tcp); //receive one line

i = readsep(" "); //read first word

switch(i)

{

//check http error code

case "HTTP/1.1":

case "HTTP/1.0":

error = real(readsep(" "));

if(error != 200 && error != 301)

{

closesocket(tcp);

return error;

}

break;

//if page moved than locate new page and download from it.

case "Location:":

if(error == 301)

{

closesocket(tcp);

url = readsep(chr(13) + chr(10));

return downloadfile(url,argument1);

}

break;

//if blank line (end of header) then exit loop

case "":

endloop = true

break;

}

}

setformat(tcp, 2); //turn off all formatting so we can receive file data.

if(file_exists(argument1))file_delete(argument1);

file = fileopen(argument1, 1);

//start receiving file

while(receivemessage(tcp, 50000) > 0) //receive 50000 bytes

{

filewrite(file); //write file chunk to file.

}

closesocket(tcp);

fileclose(file);

return 200;

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...