Bu Makalede Anlatılacak konu iki bölümden oluşmaktadır. Birinci Bölümde bir örnekle nasıl iki kullanıcının ağ üzerinde birbiri ile haberleşebileceğine değinilmiştir. İkinci bölümde ise Ağ üzerinde bulunan Kullanıcıları listeleyen bir örneğe yer verilmiştir.
NMMSG & NMMSGServ
Daha önce yazdığınız gibi DDE kullanamazsınız çünkü DDE iki programın kendi arasında haberleşmesini sağlar. ağlar arası haberleşmeyi değil. Bunun için NMMsg ve NMMsgServ nesnelerini kullanmalısınız. Bunlar Delphi5 de FastNet sekmesinde bulunmakta.
NMMsg Sizin ağda belirlediğiniz alıcıya belirlediğiniz porttan mesaj yollamanızı sağlar.
NMMsgServ ise vericiden yollanan mesajları belirlenen porttan alır.
Gördüşünüz gibi NMMsg & NMMsgServ nesneleri ancak birlikte kullanılarak iki bilgisayar arasynda bir haberleşme kurulabilir.
NMMsg:
NMMsg nesnesinin anahtar iki özelliği vardır bunlar port ve host.
port: Programın hangi porttan haberleşeceğini belirler.
Host:Programın bağlantı kuracağı IP numarası yada alıcı adıdır. Buraya mesela ağınızda tanımlı olan herhangi bir bilgisayar adı girebilirsiniz. Bakınız aşağıda:
Ayrıca FromName özelliğini de nickname olarak kullanabilirsiniz.
NMMsg nesnesinin önemli metotlarından birisi Postit metodudur.
NMMsg1.Postit('Bu bir Denemedir');
Yukarıdaki örnekte tanımlanmış alıcıya tırnak içindeki mesajı yollar.
NMsgServ:
NMMsgServ nesnesinde sadece Port özelliğine dikkat etmeliyiz. Eğer NMMsg ile NMMsgServ'in portları aynı değilse mutlaka bunları eşitlemeliyiz.
Aşağıda NMMsg ve NMMsgServ nesnelerin koordineli kullanıldığı bir örnek verilmiştir.
Alttaki Memo kutusuna yazılan mesaj; yolla tuşuna basıldığında NMMsg yardımı ile Alan kişide tanımlanan bilgisayara gönderen kişi Takma Adı ile yollanır. Üstteki büyük Memo kususu ile de görüşmeler görüntülenir.
DFM kodu aşaşıdaki gibidir.
object Form1: TForm1
Left = 214
Top = 165
Width = 544
Height = 366
Caption = 'Mesaj Yolla'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 408
Top = 0
Width = 128
Height = 279
Align = alRight
TabOrder = 0
object Panel5: TPanel
Left = 1
Top = 187
Width = 126
Height = 91
Align = alBottom
BevelOuter = bvNone
TabOrder = 0
object Label1: TLabel
Left = 5
Top = 3
Width = 40
Height = 13
Caption = 'Alan Kişi'
end
object Label2: TLabel
Left = 5
Top = 44
Width = 66
Height = 13
Caption = 'Gönderen Kişi'
end
object Edit1: TEdit
Left = 3
Top = 19
Width = 119
Height = 21
TabOrder = 0
Text = 'Müdür (Can)'
end
object Edit2: TEdit
Left = 4
Top = 59
Width = 118
Height = 21
TabOrder = 1
Text = 'Oşuz'
end
end
end
object Panel2: TPanel
Left = 0
Top = 0
Width = 408
Height = 279
Align = alClient
TabOrder = 1
object Memo1: TMemo
Left = 1
Top = 1
Width = 406
Height = 277
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
end
end
object Panel3: TPanel
Left = 0
Top = 279
Width = 536
Height = 41
Align = alBottom
TabOrder = 2
object Memo3: TMemo
Left = 1
Top = 1
Width = 407
Height = 39
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
end
object Panel4: TPanel
Left = 408
Top = 1
Width = 127
Height = 39
Align = alRight
BevelOuter = bvNone
TabOrder = 1
object BitBtn1: TBitBtn
Left = 32
Top = 6
Width = 75
Height = 25
Caption = 'Yolla!'
TabOrder = 0
OnClick = BitBtn1Click
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00300000333300
0000377777FFFF7777770FFFF099990FFFF07FFFF777777FFFF7000000333300
00007777773333777777307703333330770337FF7F333337FF7F300003333330
0003377773333337777333993333333399333F7FFFF3333FF7FF000000333300
0000777777F3337777770FFFF033330FFFF07FFFF7F3337FFFF7000000333300
00007777773333777777307703333330770337FF7F333337FF7F300003333330
0003377773FFFFF777733393300000033933337F3777777F37F3339990FFFF09
99333373F7FFFF7FF73333399000000993333337777777777333333333077033
33333333337FF7F3333333333300003333333333337777333333}
NumGlyphs = 2
end
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 320
Width = 536
Height = 19
Panels = <
item
Text = 'Durum.......:'
Width = 60
end
item
Width = 50
end>
SimplePanel = False
end
object NMMsg1: TNMMsg
Port = 6711
ReportLevel = 0
OnMessageSent = NMMsg1MessageSent
Left = 48
Top = 40
end
object NMMSGServ1: TNMMSGServ
Port = 6711
ReportLevel = 0
OnMSG = NMMSGServ1MSG
Left = 88
Top = 40
end
end
Left = 214
Top = 165
Width = 544
Height = 366
Caption = 'Mesaj Yolla'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 408
Top = 0
Width = 128
Height = 279
Align = alRight
TabOrder = 0
object Panel5: TPanel
Left = 1
Top = 187
Width = 126
Height = 91
Align = alBottom
BevelOuter = bvNone
TabOrder = 0
object Label1: TLabel
Left = 5
Top = 3
Width = 40
Height = 13
Caption = 'Alan Kişi'
end
object Label2: TLabel
Left = 5
Top = 44
Width = 66
Height = 13
Caption = 'Gönderen Kişi'
end
object Edit1: TEdit
Left = 3
Top = 19
Width = 119
Height = 21
TabOrder = 0
Text = 'Müdür (Can)'
end
object Edit2: TEdit
Left = 4
Top = 59
Width = 118
Height = 21
TabOrder = 1
Text = 'Oşuz'
end
end
end
object Panel2: TPanel
Left = 0
Top = 0
Width = 408
Height = 279
Align = alClient
TabOrder = 1
object Memo1: TMemo
Left = 1
Top = 1
Width = 406
Height = 277
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
end
end
object Panel3: TPanel
Left = 0
Top = 279
Width = 536
Height = 41
Align = alBottom
TabOrder = 2
object Memo3: TMemo
Left = 1
Top = 1
Width = 407
Height = 39
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
end
object Panel4: TPanel
Left = 408
Top = 1
Width = 127
Height = 39
Align = alRight
BevelOuter = bvNone
TabOrder = 1
object BitBtn1: TBitBtn
Left = 32
Top = 6
Width = 75
Height = 25
Caption = 'Yolla!'
TabOrder = 0
OnClick = BitBtn1Click
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00300000333300
0000377777FFFF7777770FFFF099990FFFF07FFFF777777FFFF7000000333300
00007777773333777777307703333330770337FF7F333337FF7F300003333330
0003377773333337777333993333333399333F7FFFF3333FF7FF000000333300
0000777777F3337777770FFFF033330FFFF07FFFF7F3337FFFF7000000333300
00007777773333777777307703333330770337FF7F333337FF7F300003333330
0003377773FFFFF777733393300000033933337F3777777F37F3339990FFFF09
99333373F7FFFF7FF73333399000000993333337777777777333333333077033
33333333337FF7F3333333333300003333333333337777333333}
NumGlyphs = 2
end
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 320
Width = 536
Height = 19
Panels = <
item
Text = 'Durum.......:'
Width = 60
end
item
Width = 50
end>
SimplePanel = False
end
object NMMsg1: TNMMsg
Port = 6711
ReportLevel = 0
OnMessageSent = NMMsg1MessageSent
Left = 48
Top = 40
end
object NMMSGServ1: TNMMSGServ
Port = 6711
ReportLevel = 0
OnMSG = NMMSGServ1MSG
Left = 88
Top = 40
end
end
PAS kodu aşağıdaki gibidir
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Menus, Buttons, Psock, NMMSG;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Menus, Buttons, Psock, NMMSG;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Memo1: TMemo;
Memo3: TMemo;
Panel4: TPanel;
BitBtn1: TBitBtn;
Panel5: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StatusBar1: TStatusBar;
NMMsg1: TNMMsg;
NMMSGServ1: TNMMSGServ;
procedure BitBtn1Click(Sender: TObject);
procedure NMMSGServ1MSG(Sender: TComponent; const sFrom, sMsg: String);
procedure NMMsg1MessageSent(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Memo1: TMemo;
Memo3: TMemo;
Panel4: TPanel;
BitBtn1: TBitBtn;
Panel5: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StatusBar1: TStatusBar;
NMMsg1: TNMMsg;
NMMSGServ1: TNMMSGServ;
procedure BitBtn1Click(Sender: TObject);
procedure NMMSGServ1MSG(Sender: TComponent; const sFrom, sMsg: String);
procedure NMMsg1MessageSent(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i:integer;
begin
NMMsg1.FromName := Edit2.Text;
var
i:integer;
begin
NMMsg1.FromName := Edit2.Text;
//TNMMsg.Fromname yollayan kişiyi tanımlar
if (edit1.Text<>'') and (edit2.Text<>'') then
begin
NMMsg1.Host:=Edit1.Text;
if (edit1.Text<>'') and (edit2.Text<>'') then
begin
NMMsg1.Host:=Edit1.Text;
//TNMMsg.Host yollanacak kişiyi belirler
for i:=0 to memo3.Lines.Count-1 do
begin
NMMsg1.PostIt(memo3.Lines.Strings[i]);//TMMsg.Postit metodu ile NMMsgServ nesnesine Mesaj yollanır
for i:=0 to memo3.Lines.Count-1 do
begin
NMMsg1.PostIt(memo3.Lines.Strings[i]);//TMMsg.Postit metodu ile NMMsgServ nesnesine Mesaj yollanır
Memo1.Lines.Add('['+edit2.text+'] '+memo3.Lines.Strings[i]);
end;
Memo3.Clear;
end;
end;
procedure TForm1.NMMSGServ1MSG(Sender: TComponent; const sFrom,
sMsg: String);
begin
Memo1.Lines.Add('['+sFrom+'] '+sMsg);
Statusbar1.Panels[1].Text:=sFrom+' Mesaj yolladı';
end;
sMsg: String);
begin
Memo1.Lines.Add('['+sFrom+'] '+sMsg);
Statusbar1.Panels[1].Text:=sFrom+' Mesaj yolladı';
end;
//SFrom parametresi Gönderen kişiyi belirtir Bu parametre TNMMsg.FromName parametresi ile belirlenir.
//SMsg parametresi Gönderilen mesajın kendisidir.
procedure TForm1.NMMsg1MessageSent(Sender: TObject);
begin
StatusBar1.panels[1].text:='Mesaj yollandı';
begin
StatusBar1.panels[1].text:='Mesaj yollandı';
//OnMessageSent olayı bir mesaj yollandığında gerçeklenir.
end;
end.
end;
end.