Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:WINSOCKET 2009 jan. 21 18:14 #290

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Olvasd át a winsocks doksit, sok hasznos info van benne.

Ezenkívűl ajánlom figyelmedbe a FreePascal-ban található Sockets unit-ot. Ebben is főleg a Bind, Listen, Accept eljárásokat...

A következő példát a Sockets.Accept eljárás dokumentációjában találod (angolul):

Program server;

{
A program teszteli a Sockets unit-ot, írta Michael van Canneyt és Peter Vreman
Szerver változat, Először futtasd a sock_svr programot, hogy létrehozza a socket-et és csak azután a
sock_cli programot amely így kapcsolódhat a socket-hez
}

uses Sockets;

Var
FromName : string;
Buffer : string[255];
S : Longint;
Sin,Sout : Text;
SAddr : TInetSockAddr;

procedure perror (const S : string);
begin
writeln (S,SocketError);
halt(100);
end;

begin
S:=Socket (AF_INET,SOCK_STREAM,0);
if SocketError<>0 then
Perror ('Szerver : Socket : ' );
SAddr.sin_family:=AF_INET;
{ port 50000 in network order }
SAddr.sin_port:=htons(50000);
SAddr.sin_addr.s_addr:=0;
if not Bind(S,SAddr,sizeof(saddr)) then
PError ('Szerver : Kapcsol(Bind) : ' );
if not Listen (S,1) then
PError ('Szerver : Halgat(Listen) : ' );
Writeln('Várakozás a kliens kapcsolódására, most futtasd a sock_cli programot egy másikterminál ablakban' );
if not Accept (S,FromName,Sin,Sout) then
PError ('Szerver : Elfogad(Accept) : '+fromname);
Reset(Sin);
ReWrite(Sout);
Writeln(Sout,'Üzenet a szervertől' );
Flush(SOut);
while not eof(sin) do
begin
Readln(Sin,Buffer);
Writeln('Szerver : Olvas(Read) : ',buffer);
end;
end.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

WINSOCKET 2009 jan. 13 19:46 #287

  • tanulo
  • tanulo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 1
  • Köszönetek: 0
Üdv mindenkinek!

A kérésem a következő lenne:
winsocket dll-t készítenék lazarus-al, és mindezt úgy kéne megoldanom, hogy nem blokkolt módon és lehetőleg visszahívási függvényel legyen megvalósítva. Tehát amikor várakozok egy bejövő kapcsolatra akkor nincs futás a dll függvényekben, de ha érkezik egy esemény akkor hívjon meg egy callback függvényt a windows eseménykezelője.

Mindenféle tipp érdekes számomra, előre is köszi!

  • Oldal:
  • 1