AutoIt/Sieć
Internet
[edytuj]InetGet
[edytuj]InetGet ( "URL" [,"nazwa pliku" [, opcje [, w_tle]]] )
Funkcja pobiera plik z internetu za pomocą protokołów HTTP, HTTPS lub FTP i zapisuje go na dysku. Wartość zwracana zależy od parametru w_tle.
"URL" - URL pliku do pobrania. Format np.: "http://www.somesite.com/path/file.html". Aby użyć nazwy użytkownika i hasła podczas łączenia należy poprzedzić nimi wprowadzany URL, np.: "http://moj_login:moje_haslo@www.somesite.com".
Pozostałe parametry opcjonalne:
"nazwa_pliku" - nazwa pod którą będzie zapisany pobrany plik.
opcje - opcje:
0 - (domyślnie) jeżeli to możliwe, plik pobierany jest z lokalnego cache.
1 - wymuszenie pobrania z internetu (nawet gdy plik jest dostępny w lokalnym cache).
2 - ignorowanie wszystkich błędów SSL w czasie łączenia z HTTPS.
4 - przy pobieraniu z FTP dane traktowane jako ASCII.
8 - przy pobieraniu z FTP dane traktowane jako binarne (jest to tryb domyślny transferu).
Można sumować opcje (z wyjątkiem 4 i 8, które wzajemnie się wykluczają).
w_tle - parametr określający czy funkcja ma wstrzymać wykonanie skryptu do czasu zakończenia pobierania:
0 - (domyślnie) funkcja czeka na zakończenie pobierania (funkcja zwraca ilość pobranych bajtów)
1 - pobieranie w tle. Funkcja zwraca uchwyt, który może być wykorzystany w InetGetInfo() aby sprawdzić stan pobierania. Uchwyt musi być zwolniony przez InetClose(). W tym trybie możliwe jest pobieranie jednocześnie kilku plików. Aby przerwać pobieranie należy użyć InetClose().
Jeżeli wystąpił błąd to dla w_tle=0, funkcja zwróci 0, a makro @error przyjmie wartość różną od zera. Dla w_tle=1 funkcja zwróci uchwyt, i żeby stwierdzić że wystąpił błąd pobierania należy użyć InetGetInfo().
Przykład:
$n=InetGet("http://www.autoitscript.com/autoit3/files/graphics/autoit_10_wall_1920x1200.jpg", _
"d:/autoit_10_wall_1920x1200.jpg")
SplashImageOn("Wczytano: " & $n & " bajtów.", "d:/autoit_10_wall_1920x1200.jpg")
Sleep(3000)
InetRead
[edytuj]InetRead ( "URL" [, opcje] )
Funkcja zwraca plik pobrany z internetu za pomocą protokołów HTTP, HTTPS lub FTP, w makrze @extended zwracana jest ilość wczytanych bajtów.
Jeżeli wystąpił błąd funkcja zwróci 0, a makro @error przyjmie wartość różną od zera.
Parametry "URL" i opcje - jak dla InetGet().
Przykład:
$download = InetRead("http://www.autoitscript.com")
MsgBox(0, "Wczytano: " & @extended & " bajtów.", BinaryToString($download))
Sleep(3000)
InetGetInfo
[edytuj]InetGetInfo ( [uchwyt [, indeks]] )
Zwraca szczegółowe dane dla uchwytu zwróconego przez InetGet(), lub pusty string ("") jeżeli wystąpił błąd (makro @error<>0).
Parametry (oba opcjonalne):
uchwyt - uchwyt zwrócony przez InetGet().
indeks - określa rodzaj zwracanej informacji:
-1 - zwracana jest tablica zawierająca w kolejnych komórkach wszystkie poniższe informacji
0 - ilość dotychczas wczytanych bajtów, jest aktualizowane w miarę postępu wczytywania
1 - rozmiar pliku do pobrania (nie zawsze jest dostępny)
2 - TRUE jeżeli pobieranie zakończone, FALSE jeżeli trwa
3 - TRUE jeżeli pobieranie zakończone sukcesem, FALSE jeżeli wystąpił błąd
4 - @error, jeżeli różny od zera to wystąpił błąd pobierania
5 - @extended, w zasadzie tylko dla developerów AutoIt'a
Jeśli funkcja będzie wywołana bez argumentów wtedy zwrócona będzie całkowita liczba aktywnych pobrań.
Funkcja może być wywoływana w pętli do kontroli postępów wczytywania, lub po zakończeniu wczytywania.
Przykład:
$h=InetGet("http://www.autoitscript.com/autoit3/files/graphics/autoit_10_wall_1920x1200.jpg", _
@TempDir & "\update.dat", 1, 1)
Do
Sleep(250)
Until InetGetInfo($h, 2) ;czekanie na zakończenie wczytywania
$a = InetGetInfo($h) ;pobranie wszystkich informacji
InetClose($h) ;zwolnienie uchwytu
MsgBox(0, "", "Bajtów wczytanych: " & $a[0] & @CRLF & _
"Bajtów do pobrania: " & $a[1] & @CRLF & _
"Kompletność: " & $a[2] & @CRLF & _
"Sukces: " & $a[3] & @CRLF & _
"@error = " & $a[4] & @CRLF & _
"@extended = " & $a[5] & @CRLF)
InetGetSize
[edytuj]InetGetSize ( "URL" [, opcje] )
Funkcja zwraca wielkość w bajtach pliku w internecie, lub 0 gdy wystąpił błąd (makro @error<>0).
Parametry "URL" i opcje - jak dla InetGet().
UWAGA: Nie wszystkie serwery będą poprawnie podać rozmiar pliku, zwłaszcza gdy korzystamy z serwera proxy.
Przykład:
$Size = InetGetSize("http://www.autoitscript.com/autoit3/files/graphics/autoit_10_wall_1920x1200.jpg")
MsgBox(0, "InetGetSize:", "Wielkość pliku: " & $Size & " bajtów")
InetClose
[edytuj]InetClose ( uchwyt )
Funkcja zwalnia uchwyt pobrany przez InetGet(). Zwraca TRUE, jeśli uchwyt został znaleziony i zwolniony, FALSE jeśli nie.
uchwyt - uchwyt zwrócony przez InetGet().
UWAGA:
Po zakończeniu pobierania uchwyt musi być zwolniony, inaczej mogą wystąpić błędy.
Wywołanie InetClose() przed zakończeniem pobierania spowoduje jego anulowanie.
FtpSetProxy
[edytuj]FtpSetProxy ( mod [, "proxy:port" [, "użytkownik" [, "hasło"]]] )
Ustawienie serwera proxy dla protokółu FTP. Funkcja nie zwraca żadnej wartości.
Wszystkie parametry i uwagi jak dla HttpSetProxy.
Przykład:
FtpSetProxy(2, "www-cache.myisp.net:8080")
HttpSetProxy
[edytuj]HttpSetProxy ( mod [, "proxy:port" [, "użytkownik" [, "hasło"]]] )
Ustawienie serwera proxy dla protokółu HTTP. Funkcja nie zwraca żadnej wartości.
mod - sposób użycia serwera proxy:
0 - (domyślnie) użycie bieżących ustawień Internet Explorer'a dla proxy
1 - nie używanie serwera proxy (bezpośredni dostęp)
2 - użycie określonego serwera proxy
Pozostałe opcjonalnie:
"proxy:port" - adres i port serwera proxy.
"użytkownik" - nazwa użytkownika na serwerze proxy.
"hasło" - hasło użytkownika na serwerze proxy.
UWAGA:
1. Obsługiwane są tylko serwery proxy zgodne ze standardem CERN.
2. Serwery proxy zazwyczaj składa się z adresu i numeru portu. Większość usługodawców internetowych używa numeru portu 8080, np. dla serwera proxy www.proxy.com, parametr proxy:port będzie miał postać: "www.proxy.com:8080".
Przykład:
HttpSetProxy(2, "www-cache.myisp.net:8080")
HttpSetUserAgent
[edytuj]HttpSetUserAgent ( "nagłówek" )
Funkcja ustawia nagłówek wysyłany podczas komunikacji z serwerem WWW (przez funkcje, InetGet(), InetGetSize() i InetRead). Zwraca poprzedni nagłówek.
"nagłówek" - string nowego nagłówka (ang. User agent)
HttpSetUserAgent("MyUserAgent")
Ping
[edytuj]Ping ( "addres" [, czas] )
Funkcja zwraca tzw. ping, czyli czas (w ms) oczekiwania na odpowiedź internetowego hosta, lub 0 gdy wystąpił błąd.
Jeżeli wystąpił błąd makro @error przyjmuje jedną z następujących wartości:
1 = host nie jest zalogowany 2 = host jest nieosiągalny 3 = złe miejsce 4 = inne błędy (np. zły adres)
"adres" - nazwa lub adres hosta (np.: "www.autoitscript.com" lub "87.106.244.38").
czas - max. czas oczekiwania na odpowiedź hosta (wartość domyślna 4000).
Przykład:
$ping = Ping("pl.wikibooks.org", 250)
If $ping Then
MsgBox(0, "Ping:", "Odpowiedź hosta po: " & $ping & " ms")
Else
MsgBox(0, "Ping:", "Wystąpił błąd nr: " & @error)
EndIf
TCP
[edytuj]Co to jest TCP?
[edytuj]TCP (ang. Transmission Control Protocol) – połączeniowy, niezawodny, strumieniowy protokół komunikacyjny wykorzystywany do przesyłania danych pomiędzy procesami uruchomionymi na różnych komputerach. W przeciwieństwie do UDP, TCP gwarantuje dostarczenie wszystkich pakietów w całości, z zachowaniem kolejności i bez duplikatów, jednak kosztem zwiększonej ilości przesyłanych danych.
TCP jest protokołem działającym w trybie klient-serwer. Serwer oczekuje na nawiązanie połączenia na określonym porcie. Klient inicjuje połączenie do serwera. Połączenie jest realizowane przez tzw. gniazda czyli dwukierunkowe punkty końcowe połączenia. Dwukierunkowość oznacza możliwość wysyłania i przyjmowania danych.
Gniazdo ma następujące cechy:
1. Typ gniazda identyfikujący protokół wymiany danych, TCP lub UDP.
2. Lokalny adres IP.
3. Numer portu identyfikujący proces, który wymienia dane przez gniazdo.
Aby nawiązać połączenie protokółem TPC należy uruchomić skrypty na dwóch komputerach, z których jeden będzie serwerem, a drugi klientem. Skrypt serwera musi być uruchomiony jako pierwszy.
Tworzenie serwera TCP
[edytuj]1. Uruchomienie usługi TCP (TCPStartup).
2. Utworzenie głównego gniazda nasłuchu połączeń przychodzących (TCPListen).
3. Tworzenie pętli nasłuchu:
- zezwolenie na próby połączenia przychodzącego na gnieździe (TCPAccept)
- odebranie danych z podłączonego gniazda (TCPRecv)
- zamknięcie otwartych połączeń (TCPCloseSocket)
Przykładowy skrypt serwera (adres IP należy dostosować do własnych realiów):
;TCP serwer
TCPStartup() ;start usługi TCP
$mainsocket = TCPListen("127.0.0.1", 65432) ;utworzenie głównego gniazda nasłuchu
While 1 ;pętla nasłuchiwania
$acceptedSocket = TCPAccept($mainsocket) ;możliwe połączenie do zaakceptowania
If $acceptedSocket <> -1 Then ;jeśli $acceptedSocket jest różne od -1, ...
$receivedData = TCPRecv($acceptedSocket, 1024) ;jeśli gniazdo jest połączone odbieramy pakiet od klienta
MsgBox(64, "Wiadomość otrzymana!", "Otrzymałem wiadomość: " & $receivedData)
TCPCloseSocket($acceptedSocket) ;zamknięcie otwartych połączeń
EndIf
WEnd
Tworzenie klienta TCP
[edytuj]1. Uruchomienie usługi TCP (TCPStartup).
2. Łączenie z serwerem (TCPConnect).
3. Przesłanie pakietu danych do serwera (TCPSend).
4. Zamknięcie otwartego połączenia (TCPCloseSocket).
5. Zamknięcie usługi TCP (TCPShutdown).
Przykładowy skrypt klienta (adres IP należy dostosować do własnych realiów):
;TCP klient
TCPStartup() ;start usługi TCP
$socket = TCPConnect("127.0.0.1", 65432) ;próbuje połączyć się z serwerem i zapisuje nr gniazda w $socked
If $socket = -1 Then ;jeśli $socket = -1, komunikat o błędach
MsgBox(16, "Błąd:", "Połączenie z serwerem nie można ustalić!")
EndIf
$sendedBytes = TCPSend($socket, "Pozdrowienia z komputera klienta :)") ;wysyła wiadomość do połączonego gniazda
If $sendedBytes = 0 Then ;jeśli wartość zwracana TCPSend(...) = 0 to wystąpił błąd
MsgBox(16, "Error", "Pakiet nie może być wysłany.") ;komunikat błędu
EndIf
TCPCloseSocket($socket) ;zamknięcie otwartego połączenia
TCPShutdown() ;koniec usługi TCP
Szczegółowy opis funkcji TCP
[edytuj]TCPStartup
[edytuj]TCPStartup ( )
Funkcja wywołuje usługę TCP. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error zawiera kod błędu API).
Funkcja jest używana po stronie serwera i klienta.
TCPAccept
[edytuj]TCPAccept ( gniazdo_główne )
Funkcja zezwala na przychodzące połączenia na gnieździe serwera. Zwraca identyfikator gniazda klienta, które wykonuje połączenie, lub -1 gdy wystąpił błąd (makro @error zawiera kod błędu API).
gniazdo_główne - identyfikator gniazda serwera, zwracany przez funkcję TCPListen.
Funkcja jest używana po stronie serwera.
TCPConnect
[edytuj]TCPConnect ( IP, port )
Funkcja tworzy gniazdo podłączone do istniejącego serwera. Zwraca identyfikator gniazda, lub -1 gdy wystąpił błąd. Makro @error przyjmuje wartość:
1 - zły adres IP
2 - zły nr portu
IP - adres IP serwera.
port - numer portu na którym będzie realizowane połączenie.
Funkcja jest używana po stronie klienta.
TCPListen
[edytuj]TCPListen ( IP, port [, max] )
Funkcja tworzy gniazdo nasłuch na połączenia przychodzące. Zwraca identyfikator gniazda, lub -1 gdy wystąpił błąd. Makro @error przyjmuje wartość:
1 - zły adres IP
2 - zły nr portu
IP - adres IP serwera.
port - numer portu na którym będzie realizowane połączenie.
max - (opcjonalnie) maksymalna długość kolejki oczekujących połączeń.
Funkcja jest używana po stronie serwera.
TCPRecv
[edytuj]TCPRecv ( gniazdo_główne, max_długość [, flaga] )
Funkcja odbiera dane z podłączonego gniazda. Zwraca dane w postaci stringu lub łańcucha binarnego. Jeżeli wystąpi błąd zwracany jest pusty string, a makro @error przyjmuje wartość -1.
gniazdo_główne - identyfikator gniazda serwera, zwracany przez funkcję TCPListen.
max_długość - maksymalna długość odbieranych danych (znaków lub bajtów).
flaga - (opcjonalnie) sposób traktowania odebranych danych:
0 - dane traktowane jako string (wartość domyślna)
1 - dane traktowane jako łańcuch binarny
Funkcja jest używana po stronie serwera.
TCPSend
[edytuj]TCPSend ( gniazdo_główne, dane )
Funkcja wysyła dane z podłączonego gniazda. Zwraca ilość wysłanych bajtów, lub 0 jeżeli wystąpił błąd (makro @error zawiera kod błędu API).
gniazdo_główne - identyfikator gniazda serwera, zwracany przez funkcję TCPConnect.
dane - przesyłane dane tekstowe lub binarne.
UWAGA: Jeśli chcemy przekazać dane Unicode musimy je zakodować / odkodować funkcjami StringToBinary() / BinaryToString().
Funkcja jest używana po stronie klienta.
TCPCloseSocket
[edytuj]TCPCloseSocket ( gniazdo )
Funkcja zamyka gniazdo TCP. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error przyjmuje wartość kod błędu API).
gniazdo - identyfikator gniazda zwracany przez funkcję TCPConnect, TCPListen lub TCPAccept.
Funkcja jest używana po stronie klienta i serwera.
TCPShutdown
[edytuj]TCPShutdown ( )
Funkcja zamyka usługę TCP. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error zawiera kod błędu API).
UWAGA: Należy wywołać TCPShutdown dla każdego udanego TCPStartup.
Funkcja jest używana po stronie serwera i klienta.
TCPNameToIP
[edytuj]TCPNameToIP ( "nazwa" )
Funkcja zmienia nazwę internetową na numer IP. Jeżeli wystąpił błąd zwracany jest pusty string, a makro @error zawiera kod błędu API.
"nazwa" - string zawierający nazwę internetową.
UWAGA: Aby użyć tej funkcji należy najpierw wywołać TCPStartup().
Przykład:
TCPStartup()
$IP = TCPNameToIP("autoit.com")
MsgBox(0, "TCPNameToIP:", $IP)
UDP
[edytuj]Co to jest UDP?
[edytuj]UDP (ang. User Datagram Protocol – protokół pakietów użytkownika) - w przeciwieństwie do TCP jest to protokół bezpołączeniowy, więc nie ma kontroli nawiązywanie połączenia i przepływu danych. Korzyścią płynącą z takiego uproszczenia jest większa szybkość transmisji danych. Z tych względów UDP jest często używany w takich zastosowaniach jak wideokonferencje, strumienie dźwięku w internecie i gry sieciowe.
O ile w protokóle TCP przesyłanie danych jest możliwe dopiero po nawiązaniu połączenia między klientem a serwerem (serwer musi wysłać do klienta potwierdzenie, że jest gotowy do odbioru danych, a poprawność transmisji jest monitorowana), w protokóle UDP nie ma żadnych mechanizmów sprawdzających nawiązanie połączenia i poprawność transmisji danych. Klient wysyła dane "w ciemno", bez możliwości uzyskania w ramach protokółu informacji czy dotarły one do adresata.
Z tego powodu to programy wykorzystujące protokół UDP powinny same zapewnić mechanizmy odpowiadające za prawidłowe transportowanie danych.
Tworzenie serwera UDP
[edytuj]1. Uruchomienie usługi UDP (UDPStartup).
2. Utworzenie gniazda nasłuchu na IP serwera i podanym porcie (UDPBind).
3. Utworzenie pętli nasłuchu:
- odczyt danych od klienta (UDPRecv).
Przykładowy skrypt serwera (adres IP należy dostosować do własnych realiów):
;UDP server:
UDPStartup() ;start usługi UDP
$socket = UDPBind("127.0.0.1", 7777) ;informujemy serwer, że powinien czekać na IP 127.0.0.1 i porcie 7777 na dane klientów
While 1
$data = UDPRecv($socket, 2048) ;odebranie przesłanych danych i zapisanie w zmiennej $data
If $data <> "" Then ; mamy co?
MsgBox(64, "Wiadomość odebrana!", "Otrzymałeś wiadomość: " & $data) ;wyświetlenie wyników
EndIf
Wend
Tworzenie klienta UDP
[edytuj]1. Uruchomienie usługi UDP (UDPStartup).
2. Wysłanie danych adresowanych na gniazdo serwera (UDPOpen).
3. Zamknięcie połączenia (UDPCloseSocket).
4. Zamknięcie usługi UDP (UDPShutdown).
Przykładowy skrypt klienta (adres IP należy dostosować do własnych realiów):
;UDP klient:
UDPStartUp() ;start usługi UDP
$socket = UDPOpen("127.0.0.1", 7777) ;łączenie z serwerem
UDPSend($socket, " Pozdrowienia od klienta!") ;wysłanie tekstu na serwer przez uprzednio otwarte gniazdo ($Socket)
UDPCloseSocket($socket) ;zamyknięcie otwartego połączenia
UDPShutdown() ;zakończenie usługi UDP
Szczegółowy opis funkcji UDP
[edytuj]UDPStartup
[edytuj]UDPStartup ( )
Funkcja wywołuje usługę UDP. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error zawiera kod błędu API).
Funkcja jest używana po stronie serwera i klienta.
UDPOpen
[edytuj]UDPOpen ( IP, port [, flaga] )
Funkcja otwiera połączenie do gniazda serwera. Zwraca tablicę zawierającą w komórkach dane gniazda serwera:
[1] - identyfikator gniazda
[2] - adres IP serwera
[3] - nr portu serwera na którym będzie realizowane połączenie
Jeżeli wystąpił błąd to komórka [0] przyjmuje wartość 0, a w makrze @error przekazany jest kod błędu API.
Parametry:
IP - adres IP serwera.
port - numer portu, na którym będzie realizowane połączenie.
flaga - (opcjonalnie) 0 - brak dodatkowych opcji (domyślnie), 1 - umożliwia nadawanie na adres "255.255.255.255". Użycie tej opcji umożliwia wysłanie wiadomości do wszystkich serwerów danej podsieci. Jeżeli prefiks danej podsieci wynosi "192.0.2" to podanie adresu "192.0.2.255" spowoduje wysłanie danych do wszystkich serwerów ustawionych w tej podsieci, np. na adresach IP: "192.0.2.101", "192.0.2.102", "192.0.2.103", itd.
Funkcja jest używana po stronie klienta.
UDPBind
[edytuj]UDPBind ( IP, port )
Funkcja tworzy na serwerze gniazdo nasłuchu. Zwraca tablicę zawierającą w komórkach dane gniazda serwera:
[1] - identyfikator gniazda
[2] - adres IP serwera
[3] - nr portu serwera, na którym będzie realizowane połączenie
Jeżeli wystąpił błąd to w makrze @error przekazany jest kod błędu API.
Parametry:
IP - adres IP serwera.
port - numer portu, na którym będzie realizowane połączenie.
Funkcja jest używana po stronie serwera.
UDPRecv
[edytuj]UDPRecv ( tablica, max_długość [, flaga] )
Funkcja odbiera dane na podanym gnieździe. Zwraca dane w postaci stringu lub łańcucha binarnego lub tablice (dla flagi = 2 lub 3). Jeżeli wystąpi błąd zwracany jest pusty string, a makro @error przyjmuje wartość kod błędu API.
tablica - dane gniazda w postaci tablicy zwracanej przez funkcję UDPBind.
max_długość - maksymalna długość pakietu odbieranych danych.
flaga - określa rodzaj zwracanej wartości:
0 - (domyślnie) automatyczne rozpoznanie: tekst / łańcuch binarny
1 - zwracany łańcuch binarny
2 - zwracana jest tablica, [0] - dane (automatyczne rozpoznanie typu), [1] - adres IP, [2] - nr portu
3 - zwracana jest tablica, [0] - dane jako łańcuch binarny, [1] - adres IP, [2] - nr portu.
Funkcja jest używana po stronie serwera.
UDPSend
[edytuj]UDPSend ( tablica, dane )
Funkcja wysyła dane na gniazdo serwera. Zwraca ilość wysłanych bajtów. Jeżeli wystąpił błąd to makro @error przyjmuje wartość kod błędu API.
tablica - dane gniazda serwera w postaci tablicy zwracanej przez funkcję UDPOpen.
dane - przesyłane dane tekstowe lub binarne.
Funkcja jest używana po stronie klienta.
UDPCloseSocket
[edytuj]UDPCloseSocket ( tablica )
Funkcja zamyka gniazdo UDP na serwerze. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error przyjmuje wartość kod błędu API).
tablica - dane gniazda w postaci tablicy zwracanej przez funkcję UDPBind lub UDPOpen.
Funkcja jest używana po stronie serwera.
UDPShutdown
[edytuj]UDPShutdown ( )
Funkcja zamyka usługę UDP. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error zawiera kod błędu API).
UWAGA: Należy wywołać UDPShutdown dla każdego udanego UDPStartup.
Funkcja jest używana po stronie serwera i klienta.