Помогите с сокетами

Тема в разделе "WASM.BEGINNERS", создана пользователем Doman, 4 мар 2006.

  1. Doman

    Doman New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2005
    Сообщения:
    29
    Адрес:
    Russia
    Если у кого ни будь есть возможность, выложите пожалуйста рабочий код функции которая используя API подключалась бы к какому ни будь сайту и скачивала с него какую ни будь страницу. Заранее благодарен.
     
  2. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    66
    Адрес:
    Тайланд
    использую wininet библиотеку.


    Код (Text):
    1.  
    2. DWORD dReadFileCount;
    3. HINTERNET hSource;
    4. HINTERNET hSession;
    5. BOOL ret = FALSE;
    6. char buffer[4096];
    7.  
    8.     {
    9.         hSession = InternetOpen ("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", LOCAL_INTERNET_ACCESS, NULL,                     INTERNET_INVALID_PORT_NUMBER, INTERNET_FLAG_DONT_CACHE);
    10.  
    11.     if (hSession == NULL) return -1;
    12.  
    13.         hSource = InternetOpenUrl (hSession, "www.xakep.ru", NULL, 0xFFFFFFFF, INTERNET_FLAG_DONT_CACHE, 0);
    14.         if (hSource == NULL) return -1;
    15.  
    16.         InternetReadFile (hSource, buffer, 4096, &dReadFileCount);
    17.         printf("%s\n", buffer);
    18.     }
    19.  
    20.  




    вот нечто такое получается =) удачи!
     
  3. Doman

    Doman New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2005
    Сообщения:
    29
    Адрес:
    Russia
    Благодарю за ответ, а на чистых API ?
     
  4. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Благодарю за ответ, а на чистых API ?

    Да и тут не грязные:)
     
  5. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    66
    Адрес:
    Тайланд
    Doman, может за тебя написать утилиту, которая делает, то что тебе нужно?? в инете полно инфы по "чистым" сокетам.. будь добр use google :)
     
  6. Doman

    Doman New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2005
    Сообщения:
    29
    Адрес:
    Russia
    Прошу прощения, не ястно выразился, я имел ввиду используя функции socket, connect, send и recv а то у меня что то не очень получается.
     
  7. CDW

    CDW New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    5
    Адрес:
    Germany
    A Masm DLL with source - "pure" socket using ;)

    it was written for using with masm32/delphi/Lcc32/VB etc.





    Some documentation:
    Код (Text):
    1.  
    2. GetHttpFile proto :DWORD,:DWORD,:DWORD
    3. GetHttpFileEx proto :DWORd,:DWORD,:DWORD,:DWORD
    4. GetHttpFileExtreme proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    5.  
    6.  
    7.  
    8. GetHttpFile proc URL:DWORD,path:DWORD,_wait:DWORD
    9.  


    URL=pointer to the URL-string (http:// is optionaly)

    path=pointer to a string where to save the file

    _wait="Boolean", for FALSE the procedure create a download-thread an returns immediatly, for TRUE it waits for the complete download






    Код (Text):
    1.  
    2. GetHttpFileEx proc URL:DWORD,path:DWORD,_wait:DWORD,INFO:DWORD
    3.  


    INFO=look at source ;) - some struct you can use in your program, if you pass a pointer to this struct, your program can read the downloadstatus/size/received bytes etc. (of course if you set _wait=FALSE ;) ), if you dont want to use it - just pass a NULL


    Код (Text):
    1.  
    2. GetHttpFileExtreme proc URL:DWORD,path:DWORD,_wait:DWORD,INFO:DWORD,Port:DWORD, CallBack:DWORD
    3.  


    Port = your user-defined port (default port 80 is used for passing 0)

    CallBack = pass a pointer to your callback procedure - the download thread calls your callback in some intervalls, so for example you can implement a progressbar.

    If you dont want to use it - just pass a NULL







    If something is wrong, you get often ;) an error-code
    Код (Text):
    1.  
    2. ERROR_ALLOC equ 1
    3. ERROR_THREAD equ 2
    4. etc (source)
    5.  




    Example:
    Код (Text):
    1.  
    2. .data
    3.     URL db "http://testserver.xyz",0   
    4.     path db "tsetme.htm",0
    5.    
    6.     .code
    7.    
    8.    
    9.     invoke GetHttpFileEx,addr URL,addr path,TRUE,addr info
    10.     invoke GetHttpFile,addr URL,addr path,TRUE
    11.     invoke GetHttpFileExtreme,addr URL,addr path,FALSE,addr info,80,addr Caller
    12.  
    13.  
    14.  
    15. Caller proc
    16. LOCAL msg_buffer [1024]:BYTE
    17.     .data
    18.     info Info_struct <>
    19.     schablone db "Http: %d,Exitcode:%d, Content-length: %d, received: %d, finished: %d",0
    20.     .code
    21.    
    22.     invoke wsprintf,addr msg_buffer,addr schablone, info.Http_response, info.Errorcode,info.Content_length, info.received, info.finished
    23.     mov eax,info.Content_length
    24.     cmp info.received,eax
    25.     jnbe @f
    26.    
    27.     @@:
    28.     invoke MessageBox,0,addr msg_buffer,0,0
    29.  
    30.    
    31.     ret
    32.  
    33. Caller endp
    34.  




    [​IMG] _45640559__GetHttpFile.zip