Ağ Üzerinde Haberleşme


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.
interface.GIF (11902 bytes)

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

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;

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;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
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;
//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

            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;
//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ı';
//OnMessageSent olayı bir mesaj yollandığında gerçeklenir.
end;
end.

xxxxxx