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