Voisiko joku antaa esimerkki koodin console-ohjelmasta, joka käyttää socketteja ja heti kun viesti saapuu niin se näyttää sen messageboxissa?
Omani on tälläinen, mutta se ei toimi:
program Serveri; uses SysUtils, sockets, dialogs; var Server : TTcpServer; Teksti : string; begin server := ttcpserver.Create(nil); server.LocalPort := '23'; server.Active := true; server.open; repeat teksti := server.Receiveln; if teksti <> '' then showmessage(teksti); until teksti = '!exit'; server.Active := false; end.
Saisiko tähän mitenkään sellaisen OnReceive toiminnon?
OnRecieve toiminnon saat, kun selvität mitä parametreja OnRecieve funktioon kuuluu ja sitten asetat sen käsin:
server.OnRecieve := MunRecieveFunktio;
Se on Receive... Eli jos teen proceduurin MunReceiveFunktio ja laitan tuon koodinpätkän server.open:in jälkeen niin jääkö se sitten odottamaan sitä viestiä ja mitä se tekee sen jälkeen? jää uudestaan odottamaan vai? ja jos näin niin miten se sitten sammutetaan?
edit: en saanu toimimaan... voitteko antaa toimivan esimerkkikoodin?
Tuo onRecieve toimii samalla tavalla kuin formille asetetun komponentin onRecieve, eli se ei odota mitään. Odotuksen joudut hoitamaan itse, esim looppi jossa on Application.ProcessMessages.
Recieve funktion rakenteen saat selville esim. luomalla uuden projecktin ja pistämällä formille TTcpServer komponentin ja asettamalla sille normaalisti OnRecieve käsittelijän. Sitten katsot minkälaisen proseduurin Delphi sille tekee.
Delphin luoma koodi on tämän tapainen:
procedure TForm1.TcpServer1Recieve(...);
Sitten luot konsoliohjelmaasi funktion jolla on samat parametrit kuin tuolla Delphin luomalla (ilman viittausta formiin):
procedure MunRecieveFunktio(...);
Toivottavasti ymmärsit, ei ole Delphiä asennettuna, kun Linuxia käytän, mutta kysy lisää jos et tajunnut.
joo, tajusin eli laitanko siihen looppiin tuon processmessagesin sinne loppuun vain mihin kohtaan?
Ei sillä oikeastaan ole väliä mihin sen laittaa, tuo vain käsittelee käyttöjärjestelmän lähettämät viestit ettei ohjelman tileaksi tule "Ei vastaa". Eli voit hyvin laittaa sen loopin loppuun.
Aihe on jo aika vanha, joten et voi enää vastata siihen.