Hogyan
csináljunk BNC-t Delphiben?
Hogyan készítsünk BNC-t az
IRC alá? A válasz az elkövetkező sorokban rejlik, ami kizárólag a
megvalósításáról szól, így egy minimális IRC meg persze a Delphi
socket komponenseinek ismerete is kell majd hozzá,
amit egy régebbi cikkemben olvashattatok. Biztos sokan ismeritek a Linux alá írt psyBNC nevezetű
programot, ami már Windows platformra is megjelent. Ha még nem is egy
ilyesmire, de egy hasonló program elkészítésére törekszünk, vagy legalábbis az
alapjait megpróbáljuk elkészíteni…
Az én módszeremmel ez nagyon könnyen és gyorsan megoldható, ami egy
minimális szintet tökéletesen kielégít és később majd egyszerűen
továbbfejleszthető. A mi BNC-nk feladata kizárólag
annyi lesz, hogy egy megadott IP címre egy megadott PORT alapján csatlakozva
fellépjen a célgépre - ahol a programunk fut - és végeredményben a célgép hostjával lépjünk fel az IRC-re.
A mi esetünkben a célgép a saját gépünk lesz, amelynek IP címe helyére
nyugodtan írhatunk “localhost”-ot, de akinek ez nem tetszik az használja csak nyugodtan a 127.0.0.1 címet! ;-) Lássuk akkor a medvét!
1. Első lépésként elindítjuk kedvenc
programunkat, a Delphit, majd nyitunk egy új alkalmazást.
2. Ezután az Internet paletta alatt ledobunk egy TServerSocket és egy TClientSocket
komponenst a formra.
3. A TServerSocket port
tulajdonságát tetszőlegesre állíthatjuk, ami nálunk a 6565 lesz. Ezzel
határozhatjuk meg, hogy a célgép IP-je után milyen porton csatlakozunk fel. Például: /server
localhost:6565 vagy /server
127.0.0.1:6565
4. A TClientSocket port
tulajdonsága viszont már a később megadott IRC szerver portjával
fog megegyezni, ami alapesetben a 6667 szokott lenni, így mi is ezt adjuk meg.
5. Eddig van egy formunk,
rajta két socket komponens, amelyekből már csak az
események hiányoznak, és máris készen van a BNC. Vágjunk hát bele...
TServerSocket.:
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Host := 'extra.irc.hu'; //Itt határozzuk meg az IRC szerver hosztját, ami jelen esetben az IRCnet
egyik tagja, az Extra lesz.
ClientSocket1.Active := True;
//Nem teljesen ide tartozik, de a ServerSocket Active tulajdonságát ne felejtsük el a programban, vagy
azon kívül True-ra állítani.
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText(Socket.ReceiveText);
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ShowMessage('A kapcsolat
hiba folytán megszakadt...');
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Active := False;
end;
…
TClientSocket.:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
ServerSocket1.Socket.Connections[0].SendText(Socket.ReceiveText);
end;
…
Természetesen még tovább cicózhatnánk 1-2 event-tel, meg
tulajdonsággal, de a lényeg gondolom érthető, a többi meg már a Socket rejtelmei közé tartozik.
Ezután nincs más teendőnk, mint lefordítani a programot, majd megnyitni
egy IRC klienst. (pl.: mIRC, siRC).
Ezután bepötyögjük a célgép IP címét, ahol a program fut (ugyebár a mi
esetünkben saját IP címünket írjuk be) és a megadott portunkat,
majd ezek után automatikusan felcsatlakozik a TClientSocket
Host property-ben szereplő
IRC szerverre a hozzá tartozó default porton át, ami az extra.irc.hu:6667
lesz.
Persze az igazi fejlett BNC-k egész nap
működnek és akkor is futnak, ha a felhasználó nincsen gépközelben, azaz ha nem
fut nála kliens, és még sok egyéb funkciót is ellátnak, de a cél az volt, hogy
bemutassam, nem is olyan nehéz egy BNC-t megírni,
mint ahogy egyesek gondolják.
*** Forrás mellékelve - bnc.zip
***
Gebei János – ircadmin@aom.hu