Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: Serveri

NanoSoft [08.05.2006 21:39:24]

#

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?

zacura [09.05.2006 11:57:31]

#

OnRecieve toiminnon saat, kun selvität mitä parametreja OnRecieve funktioon kuuluu ja sitten asetat sen käsin:

server.OnRecieve := MunRecieveFunktio;

NanoSoft [09.05.2006 14:31:29]

#

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?

zacura [09.05.2006 14:48:26]

#

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.

NanoSoft [09.05.2006 16:45:40]

#

joo, tajusin eli laitanko siihen looppiin tuon processmessagesin sinne loppuun vain mihin kohtaan?

zacura [09.05.2006 18:26:24]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta