BC++ Charon 1 Comunication Example

Příklad jednoduché komunikace s obecnými TCP/IP zařízeními v Borland C++ Builder 6.00. Příklad demonstruje jednoduchý Client terminál a základní příkazy NVT (Network Virtual Terminal) = Are You There a rozšíření pro I/O funkce.

Jedná se o velmi jednoduchou aplikaci, která má pouze demonstrativní účely a lze ji plně využít pro tvorbu Vašich vlastních aplikací. Pozornost je zaměřena hlavně na korektní řešení síťové části, včetně detekce uzavření spojení ze strany serveru.


Pokud chcete ve vaší aplikaci ovládat I/O piny pomocí NVT (v příkladu použito jako ovládání LED a zpětné čtení "svítí" / "nesvítí", oceníte tento příklad, protože nebudete muset podrobně studovat NVT dokumentaci...

Popis funkcí zdrojového kódu

  • void __fastcall Image1Click(TObject *Sender);
    void __fastcall Label3Click(TObject *Sender);
    Funkce otevře defaultni HTML prohlížeč se stránkou www.hwgroup.cz
  • void __fastcall ConnectBtnClick(TObject *Sender);
    Funkce je volána po stisku tlačítka Connect(Disconnect) Pokud je ClientSocket v aktivním stavu (je vytvořeno TCP spojení s modulem), spojení je rozpojeno. Pokud spojení navázáno není, předá se systému požadavek na jeho vytvoření.
  • void __fastcall WriteLEDBtnClick(TObject *Sender);
    Funkce vytvoří NVT příkaz podle zaškrtnutých checkboxů a pokud je navázáno spojení s modulem, data odešle pomocí objektu ClientSocket.
  • void __fastcall ClientSocketConnect(TObject *Sender, TCustomWinSocket *Socket);
    Funkci volá systém po vytvoření spojení s TCP klientem. Funkce po sestavení spojení odešle modulu NVT příkaz AYT (Are You There)
  • void __fastcall ClientSocketError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode);
    Funkci volá systém, pokud dojde k chybě TCP spojení.
  • void __fastcall ClientSocketRead(TObject *Sender, TCustomWinSocket *Socket);
    Funkci volá systém, pokud jsou přijata TCP data ze socketu. Funkce zobrazuje přijaté znaky do okna Memo, každý TCP rámec na samomstatný řádek. Pokud se v proudu dat vyskytne znak 0xFF, funkce funguje jako stavový automat. Funkce hledá výskyt znaku 0xFF a pokud takový znak přijme, a není následován dalším znakem 0xFF, považuje ho za začátek NVT sekvence a přepne se do stavu isNVT. Pokud je znak 0xFF následován znakem 0xFA, je to začátek rozšířeného NVT příkazu a funce se přepne do stavu isNVStart. Dále je vyhodnocován příkaz NVT až do výskytu sekvence 0xFF 0xF0, která je vyhodnocena jako ukončení NVT příkazu. Následující data jsou zobrazována normálním způsobem.
  • void __fastcall FormCreate(TObject *Sender);
    Funkce je volána při vytváření hlavního okna aplikace.
  • void __fastcall AYTBtnClick(TObject *Sender);
    Funkce je volána stiskem tlačítka AYT. Pokud je sestaveno spojení s modulem, Funkce vyšle NVT příkaz Are You There
  • void __fastcall ClearBtnClick(TObject *Sender);
    Funkce je volána stiskem tlačítka se symbolem popelnice a vymaže okno s přijatými daty.
  • void __fastcall ReadLEDBtnClick(TObject *Sender);
    Funkce odešle modulu dotaz na stav vstupů. Odpověď je vyhodnocována až při příjmu dat funkcí ClientSocketRead
  • void __fastcall SendBtnClick(TObject *Sender);
    Stiskem tlačítka Send se převedou data ze vstupního editačního boxu a odešlou se, pokud je sestaveno spojení s modulem.
  • void __fastcall FormDestroy(TObject *Sender);
    Funkce se volá při dealokování hlavního okna aplikace po jeho zavření a zapíše poslední hodnoty IP a Port do .ini souboru.
  • bool CheckHEX( AnsiString S, AnsiString &GO);
    Funkce zkontroluje, zda vstupní editační řádek obsahuje správnou sekvenci pro zápis HEX čísel a pokud ano, převede HEX čísla do binární sekvence znaků a uloží je do řetězce GO.
  • void __fastcall SendHEXBtnClick(TObject *Sender);
    Funkce zavolá převod vstupního řádku v HEX a pokud je vše v pořádku a je sestaveno TCP spojení, odešle data v binárním formátu do modulu.
  • void __fastcall ClientSocketDisconnect(TObject *Sender, TCustomWinSocket *Socket);
    Funkce je volána systémem při ukončení TCP spojení.
  • void TMainFrm::HandleButtons(bool Active);
      Funkce nastaví povolení/zakázání tlačítek a vstupních komponent podle proměnné Active.
  • void __fastcall TMainFrm::WriteaReadBtnClick(TObject *Sender);
    Funkce zavolá funkce WriteLEDClick a RedLEDClick.

 

Download zdrojových kódů a .EXE verze

  • bcc_ch1com_example.zip
     - /Source = MainForm.cpp, MainForm.dfm, CharonDemo.cpp, CharonDemo.bpr a ostatní zdrojové kódy
     - /Program = CharonDemo.exe, CharonDemo.ini