TCP IP Üzerinden İletişim

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

TCP IP Üzerinden İletişim

Mesaj gönderen Lost Soul »

Free bir component olan Fast TCP componenti ile yazdığım örnek bir chat programı.

Bu bileşen ile Remote, Chat , Online Game,Dosya Transferi velhasıl TCP ip ile hayal gücünüze bağlı olrak herşeyi rahatlıkla yapabilirsiniz.

Indy,Delphi Internet vs. vs. diğer bileşenlerinin artıları yanı sıra bir çok artısı daha var.

Resim

yukarıdaki even listesinden neler yapabileceğinzi pekala görebilirsiniz. ;)

Örnek teşkil etmesi için alel acele bir chat programı yazdım.

Hepinizin işine yaraması dileğiyle.

Program irc benzeri bir biçimde çalışıyor.

Server programı bir bilgisayarda çalıştırılacak
Client Programı ise sınırsız bilgisayardan çalıştırılablir (Teorik olarak :))

Bir kişinin yazdığı mesajı diğer bağlı kişiler de görebilir.
Server
Resim

Client
Resim




Server kısmında istekleri kabul et kutucuğunu işaretleyip kaydet butonuna tıklayın



Örnek Chat Programı
Fast TCP Componenti veya Fast TCP Componenti



Client Kısmı

Kod: Tümünü seç

unit fmain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FasterTCP, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    cl: TFasterTCPClient;
    Durum: TStatusBar;
    Panel1: TPanel;
    Label1: TLabel;
    xuser: TEdit;
    xip: TEdit;
    xport: TEdit;
    baglan: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Panel2: TPanel;
    Panel3: TPanel;
    lchat: TMemo;
    xchat: TEdit;
    procedure clDisconnected(Sender: TObject);
    procedure clConnected(Sender: TObject);
    procedure baglanClick(Sender: TObject);
    procedure clMessageCome(Sender: TObject; TheMessage: String);
    procedure xchatKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.clDisconnected(Sender: TObject);
begin
durum.Panels[1].Text:='Bağlantı yok';
baglan.Caption:='Bağlan';
end;

procedure TForm1.clConnected(Sender: TObject);
begin
durum.Panels[1].Text:='Bağlantı sağlandı';
baglan.Caption:='Bağlantıyı kes';
end;

procedure TForm1.baglanClick(Sender: TObject);
begin
if cl.Connected then
  begin
  cl.Connected:=false;
  exit;
  end;
with cl do
  begin
  Connected:=False;
  Host:=xip.Text;
  Port:=strtointdef(xport.Text,20000);
  UserName:=xuser.Text;
  Room:='XXL';
  try
  Connected:=True;
  except on e : exception do
  durum.Panels[1].Text:='Hata :'+e.Message;
  end;
  end;

end;

procedure TForm1.clMessageCome(Sender: TObject; TheMessage: String);
begin
if TheMessage='WHO' then begin cl.Send('ITSMINE',7);exit;end;
lchat.Lines.Add(themessage);
end;

procedure TForm1.xchatKeyPress(Sender: TObject; var Key: Char);
begin
if key<>#13 then exit;
cl.Send(pchar(cl.UserName+' :'+ xchat.Text),length(cl.UserName+' :'+xchat.Text));
lchat.Lines.Add(cl.UserName+' :'+ xchat.Text);
xchat.Text:='';
end;

end.
Server Kısmı

Kod: Tümünü seç

unit fmain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, FasterTCP, StdCtrls, ExtCtrls;

type
  Tmain = class(TForm)
    SV: TFasterTCPServer;
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    liste: TListView;
    kabul: TCheckBox;
    xport: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    lchat: TMemo;
    Panel5: TPanel;
    xchat: TEdit;
    procedure listele();
    procedure ayarsakla();
    procedure ayaryukle();
    procedure mesajgonder(no : integer;mesaj : string);

    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure kabulClick(Sender: TObject);

    procedure SVClientConnected(Sender: TObject;
      Client: TFasterTCPServerClient);
    procedure SVClientMessageCome(Sender: TObject;
      Client: TFasterTCPServerClient; TheMessage: String);
    procedure SVClientDisconnected(Sender: TObject;
      Client: TFasterTCPServerClient);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure listeClick(Sender: TObject);
    procedure xchatKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  main: Tmain;
  ROOTF : string;

implementation

{$R *.dfm}

// Kullanıcı Tanımlı Prosedür ve Fonksiyounlar
procedure tmain.listele();
  var
  i : integer;
  tCl: TFasterTCPServerClient;
begin
liste.items.Clear;

for i:=0 to sv.Clients.Count-1 do
  begin
  tcl:=sv.clients.items[i];
  liste.Items.Add;
  liste.Items[liste.Items.Count-1].Caption:=tcl.UserName;
  liste.Items[liste.Items.Count-1].SubItems.Add(tcl.Host);
  end;

end;

procedure tmain.ayarsakla();
var s : tstrings;
begin
s:=tstringlist.Create;
s.Clear;
s.Add('PORT='+xport.Text);
s.SaveToFile(rootf+'Ayarlar.ini');
s.Free;
end;

procedure tmain.ayaryukle();
var s : tstrings;
begin
if not fileexists(rootf+'Ayarlar.ini') then exit;
s:=tstringlist.Create;
s.Clear;
s.LoadFromFile(rootf+'Ayarlar.ini');
xport.Text:=s.Values['PORT'];
s.Free;
end;

procedure tmain.mesajgonder(no : integer;mesaj : string);
var tCl: TFasterTCPServerClient;

begin
tcl:=sv.clients.items[no];
sv.Send(tcl,pchar(mesaj),length(mesaj));
end;



procedure Tmain.FormActivate(Sender: TObject);
begin
sv.Listen:=kabul.Checked;
ayaryukle;
end;

procedure Tmain.Button1Click(Sender: TObject);

begin
sv.Listen:=false;
sv.Port:=strtointdef(xport.text,2000);
sv.Listen:=kabul.Checked;
ayarsakla;

end;

procedure Tmain.kabulClick(Sender: TObject);
begin
sv.Listen:=kabul.Checked;
end;

procedure Tmain.SVClientConnected(Sender: TObject;
  Client: TFasterTCPServerClient);
begin
sv.Send(Client,'WHO',3);
end;

procedure Tmain.SVClientMessageCome(Sender: TObject;
  Client: TFasterTCPServerClient; TheMessage: String);
var i : integer;
begin
if TheMessage='ITSMINE' then begin listele ;exit;end;

lchat.Lines.Add(TheMEssage);
for i := 0 to liste.Items.Count-1 do
if liste.Items[i].Caption<>client.UserName then
mesajgonder(i,TheMessage);



end;

procedure Tmain.SVClientDisconnected(Sender: TObject;
  Client: TFasterTCPServerClient);
begin
listele;
end;

procedure Tmain.FormCreate(Sender: TObject);
begin
rootf:=extractfilepath(paramstr(0));
end;

procedure Tmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ayarsakla;
end;

procedure Tmain.listeClick(Sender: TObject);
begin

if liste.ItemIndex<0 then exit;
end;

procedure Tmain.xchatKeyPress(Sender: TObject; var Key: Char);
var i : integer;
begin
//if liste.ItemIndex<0 then exit;
if key<>#13 then exit;
if liste.Items.Count=0 then exit;
lchat.Lines.Add('Admin :'+xchat.Text);
for i := 0 to liste.Items.Count-1 do
mesajgonder(i,'Admin :'+xchat.Text);


xchat.Text:='';
end;

end.


Kolay gelsin
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

localde bir sorun yok, ama denediğim kadarıyla internet üzerinden bağlantıda malesef başarısız kalıyor, çözümü arıyorum bulursam buraya yazarım.
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

yukarıda verdiğim örnekteki program ile üzerinde hiçbir değişiklik yapmadan başka bir forumdaki 8-10 arkadaşımla internet üzeerinden görüşme yaptım.
Sanırım inernet üzerinden çalıştırmayaşınızın sebebi Modeminizde programınkullanacağı portu açık tutmamamanız.

Server uygulamasının çalıştırıldığı bilgisayarı modemde portu ile beraber tanıtmalı ve portu açmalısınız.
volkancesur
Üye
Mesajlar: 53
Kayıt: 01 Nis 2007 09:47
Konum: DENİZLİ

Mesaj gönderen volkancesur »

Bu Companentin Dışında Bu İşi görebilen bir companent Var mı Acaba? Ben devexpress companenlerini kullanıyorum da bulamadım.
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

Re: TCP IP Üzerinden İletişim

Mesaj gönderen hasan »

hocam uygulama çok güzel denedim ve güzel ve hızlı sorunsuz çalıştıyor.Serverda güvenlik açısından ne gibi sorunlar çıkarma olasılığı var acaba böyle tip programların , ve bunu geliştirme imkanı var mı , ?
Şöyle ki ;

1-Kişiler Özel Olarak kendi aralarında da yazışmalı Normal Mirc gibi
2-Kanal Açma olayları nasıl yapılabilir,kullanıcıyı illere göre gruplayıp,o kanala girmesini sağlıcaz.
3-Dosya gönderimi de özel olarak yapılabilir mi ?
4-Clienttek Ip ve Port No kısımları gösterilmesinin sakıncası var mı serverın güvenliği açısından
4-Online Olanlar sadece serverda değil client te de gösterilecek gibi ...

değişik uygulamalar çok güzel olurdur aslında.Bakalım denicem gelişitrmeyi ama önce bu Server Client uygulamalarının mantığını çözmek gerekiyor açıkçası.YAni biraz zamanımı alacak Hocam.Eğer bu zmana kadar daha gelişmiş bir hali varsa hocam yollamanız mümkün mü buraya yeni halini ?
Cevapla