SYNAPSE - Synchronous TCP/IP Library for Delphi
Other related information can be found at http://www.mlp.cz/space/gebauerl/synapse/
Třída: TTCPBlockSocket
- Property:
- socket:TSocket
Identifikátor Socketu. Hodí se k 'ručnímu' volání WinSock API, nebo k ručnímu připojení objektu k již vytvořenému socketu.
- LocalSin:TSockAddrIn
Struktura popisující místní stranu socketu.
- RemoteSin:TSockAddrIn
Struktura popisující vzdálenou stranu socketu.
- LastError:integer
Chybový kód poslední WinSock operace. Chybové kódy jsou popsány v dokumentaci Winsock. Voláním funkce GetErrorDesc(ErrorCode:integer):string, které předáte chybový kód, získáte slovní popis chyby.
- Protocol:integer
Winsock identifikátr protokolu.
- Metody:
- Procedure CreateSocket
Vytvoří ve WinSock nový socket.
- Procedure CloseSocket
Znicí ve WinSock používaný socket. Došlá data na tento secket budou nadále ignorována. Tato metoda je také automaticky vylána z destructoru objektu.
- procedure Bind(ip,port:string)
Připojí socket na místní IP adresu a PORT. IP adresa může být buď číselně vyjádřená nebo může být symbolický název (192.168.74.50, cosi.nekde.cz). Stejně tak PORT může být buď číslo nebo symolický název portu (23, telnet). Bude-li mít port hodnotu 0, systém sám vybere a připojí nepoužitý port v rozsahu 1024 až 4096. Po volání této metody je naplněna struktura LocalSin.
- procedure Connect(ip,port:string)
Připojí socket na vzdálenou IP adresu a PORT. Pro vyhodnocování IP a PORT platí totéž co u metody BIND, jen s tou výjimkou, že PORT s hodnotou 0 nebude připojen. Po volání této metody se vytvoří komunikační kanál mezi lokálním socketem (nebylo-li předem určeno voláním BIND, bude určeno automaticky systémem) a vzdáleným socketem. Struktury LocalSin a RemoteSin budou po této funkci naplněny platnými údaji.
- procedure SendBuffer(buffer:pointer;length:integer)
Odešle přes připojený socket data z adresy BUFFER o délce LENGTH. Je-li dat přiliš mnoho, systém je sám rozdělí do více paketů.
- procedure SendByte(data:byte)
Odešle přes připojený socket jeden BYTE dat.
- procedure SendString(data:string)
Odešle přes připojený socket řetězec dat.
- function RecvBuffer(buffer:pointer;length:integer):integer
Čeká, dokud nebude alokovaný buffer naplněn přijmutými daty. Funkce vrací počet přijmutých dat, který je za normálních okolností roven hodnotě LENGTH. Pokud tomu tak není, znamená to, že v průbehu přijímání dat doslo k rozpojení komunikačního kanálu.
- function RecvByte(timeout:integer):byte
Metoda čeká, dokud nepřijme jeden byte dat, který následně vrátí jako výsledek funkce. Pokud do doby TIMEOUT (ve vteřinách) žádná data nepřijdou, LastError bude mít hodnotu WSAETIMEDOUT.
- function Recvstring(timeout:integer):string
Metoda čeká dokud není přijmut řetězec dat. Tento řetězec dat je ukončen znakem LF. Funkce vrací string bez tohoto ukončení, tedy je z něj na konci odstraněno CR LF. Pokud do doby TIMEOUT (ve vteřinách) celý řetězec nepřijde, LastError bude mít hodnotu WSAETIMEDOUT. Metoda je napsána pro implementaci řádkových protokolů a pro maximalizaci celkového výkonu používá svoje vyrovnávací buffery. Z tohoto důvodu nepoužívejte tuto metodu s jinými metodamy příjmu dat, protože hrozí ztráta přijmutých dat.
- function PeekBuffer(buffer:pointer;length:integer):integer
Stejné jako RecvBuffer, ale přečtená data zůstanou ve frontě přijatých dat.
- function PeekByte(timeout:integer):byte
Stejné jako RecvByte, ale přečtená data zůstanou ve frontě přijatých dat.
- function WaitingData:integer
Vrátí počet bytů přijmutých dat čekajících na vyzvednutí. Pokud žádna data nečekají, vrací 0.
- function CanRead(Timeout:integer):boolean
Vrátí TRUE, jestliže je možno ze socketu číst nějaké data. Stav je testován po dobu Timeout (vteřiny). Pokud má Timeout hodnotu 0, je stav jen otestován a program ihned pokračuje dále. Když má Timeout hodnotu -1, bude běh přerušen do té doby, dokud do socketu nepřijdou nějaké data.
- function CanWrite(Timeout:integer):boolean
Vrátí TRUE, jestliže je možno do socketu zapisovat nějaké data (tedy není-li plný odesílací buffer). Stav je testován po dobu Timeout (vteřiny). Pokud má Timeout hodnotu 0, je stav jen otestován a program ihned pokračuje dále. Když má Timeout hodnotu -1, bude běh přerušen do té doby, dokud nebude možno odeslat nějaké data.
- procedure SetLinger(enable:boolean;Linger:integer)
Nastaví linger. Povolený linger znamená, že pokud se uzavírá socket, systém bude ještě po dobu LINGER (ve vteřinách) čekat na doručení odesílaných dat.
- procedure Listen
Přepne socket do módu přijímání spojení. Před touto funkcí je nutno socket pomocí metody BIND pripojit, aby systém vědel, na jakém portu má očekávat příchozí spojení.
- function Accept:TSocket
Čeká dokud nepřijde nové příchozí spojení. Jakmile přijde, je automaticky vytvořen nový socket (je vrácen touto funkcí), který je připojen na systémem určených volných portech.
- function SockCheck(SockResult:integer):integer
Voláte-li si sami WinSock API funkce, předejte jejich návratový kód jako parametr této funkci, která sama návratový kód vyhodností, zavolá připadne WSAGetLastError a zjistěný chybový kód jednak vrátí a jednak jej uloží do LastError.
- function LocalName:string
Vrátí jméno lokálního počítače. Buď jako symbolické jméno, nebo jako IP adresu. V každém případe vrácené jméno je ve formátu, které bude správně akceptováno funkcemi, které žádají vstupní paramtr IP.
- procedure GetSins
Aktualizuje hodnoty v LocalSin a RemoteSin.
- function GetLocalSinIP:string
Z LocalSin vyzvedne IP adresu socketu.
- function GetRemoteSinIP:string
Z RemoteSin vyzvedne IP adresu socketu.
- function GetLocalSinPort:integer
Z LocalSin vyzvedne číslo PORTu socketu.
- function GetRemoteSinPort:integer
Z RemoteSin vyzvedne číslo PORTu socketu.