Yerel ağda Çalışan bir Mesaj Programı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen ALUCARD »

Merhaba arkadaşlar uzun zamandır foruma gelemiyordum. ama bugun yolum düştü.

çalıştığım işyerinde benden bir program istrediler.

messenger tarzında bi mesajlaşma programı

ama yerel ağda çalışacak

bizde yakklaşık olarak 100+ bilgisayar var

ve bu bu kadarda kullanıcı demektir.

şimdi ben bu projeye nasıl başlamalıyım

Not: Delphi7 ve firebird + sqlserver2005 kullanıyorum.

önerileriniz için şimdden çok teşekkür ederim
forumda aradım ama bulamadım.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen Delhici »

Bu konu forumda sıkça konuşulmuş.Messenger programı, bir server ve clientlardan oluşur.. Yani clientlar servera mesaj yollar, serverda mesajı iletilmesi gereken yere iletir. Bunun için serversocket ve clientsocket componentlerinden faydalanabilirsin.İndy componentleride işini fazlasıyla görüyor. Delphinin demo bölümünde bir messajlaşma programı mevcut.. Onuda inceleyebilirsin.

Kolay gelsin.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen ikra »

server ve clientsocket'i ciplak kullanmak is görmez. gelistirmek gerek.
giden ve gelen havuzu olusturmali. ag da trafik yogun oldugunda mesaj kismen gelecektir. ikinci bir firsatta socket mesajin kalan kismini gönderecek. ilk gelen mesajda nick belli olurken, ikinci mesaj nick'siz oldugu icin dummy olarak algilanacak. bunlarin havuzda bekletilmesi ve mesaj tamamlandiginda isleme girmesi gerekmekte. kisacasi, basit bisey degil. oldukca komplex bir yapi. cünkü bahsi gecen bilgisayar sayisi 2-3 degil 100 adet.

Allah sabir versin kardesim...
Selâm ve Dûa ile...
kıdemsiz üye
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen ALUCARD »

cvplarınız için teşekkür ediyorum
araştırmaya devam ediyorum
gelişmeleri bu başlık altında elimden geldiğince paylaşacağım
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen bulutsuzluk_35 »

Ben olsam şöyle yapardım.Ortada bir adet server ve buna bağlanan clientlar olurdu.Server'a bağlı bilgisayarlarında bağlantı bilgilerini clientlara udp yöntemiyle broadcast ederdim.Böylece client'larda online list'i oluştururdum.birisi birisine mesaj atmak istediğinde de bir client diğerindeki mesaj alma portunu bildiği için o porttan tcp ip ile bağlantı kurar hem mesaj hemde dosya gönderimi yapabilirlerdi.

Sistemde server sadece client ların iletişim bilgilerini ve online olup olmadıklarının bilgisini broadcast yapmak için olurdu.Diğer iletişimler clientlar arasında server araya girmeden olurdu.

Bu anlattıklarıma birşey diyorlar ama ben ne olduğunu hatırlayamadım şimdi.p2p olabilir belki :).

Kolaygelsin.

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen Commandx »

Bununla ilgili bir örnek yapmıştım eskiden az bişi derleyip düzelttim umarım işinize yarar
Gerçekten güzel bir uygulama
Açılışta PC bilgilerini alıp Oturum Kimlik kazanıyor ardından göndereceğiniz text UDP sinyallerine dönüşüp ağ ortamında yayılıyor
Kendiniz Biraz daha geliştirebilirsiniz
Alttaki kodları not defterine kaydedip uzantılarını Default olarak örnek project1.dpr , Unit1.pas , unit1.dfm verdiğinizde derleyip çalıştırabilirsiniz

--------------------DPR DOSYASI---------------

Kod: Tümünü seç

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


PAs dosyası altta

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
  IdUDPClient, idsockethandle,winsock;

type
  TForm1 = class(TForm)
    IdUDPClient1: TIdUDPClient;
    IdUDPServer1: TIdUDPServer;
    Memo1: TMemo;
    Memo2: TMemo;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    Memo3: TMemo;
    Label4: TLabel;
    procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    procedure Memo1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Memo2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// YEREL IP BULMAK
function getIPs: Tstrings;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := TstringList.Create;
  Result.Clear;
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  I    := 0;
  while pPtr^[I] <> nil do
  begin
    Result.Add(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  WSACleanup;
end;

/// IP DEN HOST BULMAK
function GetIPFromHost
(var HostName, IPaddr, WSAErr: string): Boolean;
type
Name = array[0..100] of Char;
PName = ^Name;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: Integer;
begin
Result := False;
if WSAStartup($0101, WSAData) <> 0 then begin
WSAErr := 'Winsock is not responding.”';
Exit;
end;
IPaddr := '';
New(HName);
if GetHostName(HName^, SizeOf(Name)) = 0 then
begin
HostName := StrPas(HName^);
HEnt := GetHostByName(HName^);
for i := 0 to HEnt^.h_length - 1 do
IPaddr :=
Concat(IPaddr,
IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.');
SetLength(IPaddr, Length(IPaddr) - 1);
Result := True;
end
else begin
case WSAGetLastError of
WSANOTINITIALISED:WSAErr:='WSANotInitialised';
WSAENETDOWN :WSAErr:='WSAENetDown';
WSAEINPROGRESS :WSAErr:='WSAEInProgress';
end;
end;
Dispose(HName);
WSACleanup;
end;





procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);

begin
memo2.Lines.LoadFromStream(adata);
edit1.Text:=abinding.PeerIP;

end;



procedure TForm1.Memo1Change(Sender: TObject);
begin
memo2.Clear;
memo2.Lines.Add(memo3.Text+' '+ edit3.Text+' -> '+ memo1.Text);
idUDPClient1.Broadcast(memo3.Text+' '+ edit3.Text+' -> '+ memo1.Text, 6060); // tüm ağa yayın yapıyor
end;










procedure TForm1.FormCreate(Sender: TObject);
var
Host, IP, Err: string;

begin
memo3.Clear;
memo3.Lines:= GETIPS;


if GetIPFromHost(Host, IP, Err) then begin
Edit3.Text := Host;
memo3.Text := IP;
end
else
MessageDlg(Err, mtError, [mbOk], 0);


end;

procedure TForm1.Memo2Change(Sender: TObject);
begin
//idUDPClient1.Broadcast(memo3.Text+' '+ edit3.Text+' -> '+ memo1.Text, 6060); // tüm ağa yayın yapıyor
end;

end.

//----------------------- FRM DOSYASI -----------------------

Kod: Tümünü seç

object Form1: TForm1
  Left = 450
  Top = 106
  Width = 409
  Height = 448
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 232
    Width = 110
    Height = 13
    Caption = 'Yaz g'#246'nder a'#351'a'#287#305'dakini'
  end
  object Label2: TLabel
    Left = 48
    Top = 0
    Width = 78
    Height = 13
    Caption = 'G'#246'nderenin IP si'
  end
  object Label3: TLabel
    Left = 264
    Top = 0
    Width = 102
    Height = 13
    Caption = 'Local PC yada HOST'
  end
  object Label4: TLabel
    Left = 24
    Top = 392
    Width = 84
    Height = 13
    Caption = 'Nick ->     PC ADI'
  end
  object Memo1: TMemo
    Left = 16
    Top = 248
    Width = 361
    Height = 129
    ScrollBars = ssBoth
    TabOrder = 0
    OnChange = Memo1Change
  end
  object Memo2: TMemo
    Left = 16
    Top = 48
    Width = 369
    Height = 177
    Lines.Strings = (
      'Bilgi : UDP server hata vermemesi i'#231'in'
      'uses sat'#305'r'#305'na idudpsocket handle eklenmesi '#351'artt'#305'r'
      'yoksa declarations sat'#305'r'#305'nda hata verecektir')
    ScrollBars = ssBoth
    TabOrder = 1
    OnChange = Memo2Change
  end
  object Edit1: TEdit
    Left = 32
    Top = 16
    Width = 121
    Height = 21
    TabOrder = 2
  end
  object Edit3: TEdit
    Left = 240
    Top = 384
    Width = 137
    Height = 21
    Enabled = False
    TabOrder = 3
    Text = 'PC-1'
  end
  object Memo3: TMemo
    Left = 264
    Top = 16
    Width = 113
    Height = 25
    Enabled = False
    TabOrder = 4
  end
  object IdUDPClient1: TIdUDPClient
    Active = True
    BroadcastEnabled = True
    Port = 6060
    Left = 8
    Top = 328
  end
  object IdUDPServer1: TIdUDPServer
    Active = True
    BufferSize = 50000
    BroadcastEnabled = True
    Bindings = <>
    DefaultPort = 6060
    OnUDPRead = IdUDPServer1UDPRead
    Left = 8
    Top = 8
  end
end

http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen ALUCARD »

ilgilenen herkese çok teşekkür ediyorum
çalışmalarım devam ediyor.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Yerel ağda Çalışan bir Mesaj Programı

Mesaj gönderen ikutluay »

bence kasmayıp pm gönderdiğim iki projeden biri üzerinden devam edin. 2. cisi java gerektirir.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla