serversocket-clientsocket, mantık kuramadım :(

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

serversocket-clientsocket, mantık kuramadım :(

Mesaj gönderen osman_simsek »

Merhabalar tekrar,
serversocket - clientsocket uygulamam var. Sadece text transferi varsayıyorum.

Aynı ağda çalışırsa sorun yok zaten. Ancak
makinelerden internet üzerinden haberleşeceklerse server-socket uygulaması ile text transferini nasıl yapabilirim? ya da bu işlem için başka bir component mi kullanmam gerekir? eğer evetse ne kullansam bu işi görür?
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- İşin içine internet girince, kullanmak istediğin PORT hangisi ise o PORT numarasının diyalog kuracak her iki taraf için Modemlerin üzerinden ROUTE edilmesi gerekir.

- Mesela ben Zoom X5 ADSL modem kullanıyorum . Üzerinde 4 adet LAN girişi var. Bu demek oluyor ki 4 adet PC bağlabiliyor. Şimdi internet tarafından benim IP numarama atıyorum 1024 nolu porttan bilgi gelse, bu bağlı 4 PC'den hangisini muhatap kabul edecek ? İşte ROUTE işlemi dediğimiz şey, Modem Konsol ayarlarından yapılandırılan, belli portların hangi IP'ye yönlendirileceğinin bildirilmesidir.

- Ayrıca bir de Windows'daki Firewall ayarlarından ilgili port serbest bırakılmalı. Bunu söylememe bile gerek yok, zaten yapıyorsundur :wink:
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

peki bu işi anlık haberleşme programları nasıl yapıyorlar

msn, yahoo, icq gibi programlar nasıl modemden port açmadan veri gönderip alabiliyorlar ?
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

(Server) Sunucu olarak farklı bir bilgisayar kullanıyorlar.. Senin gibi yazılımın çalıştığı bilgisayarlardan birisi sunucu olmuyor...
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

server olarak farklı bir bilgisayar kullansam ?

bu iş için kullanabileceğim bir server ım var
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

O zaman sorun yok. Tüm trafik o server tarafından yürütülecek. Sen sadece sunucu bilgisayar için modem route işlemi ayarı yapacaksın.

- Client'lar (istemciler) sunucu bilgisayara bağlanacaklar, sonra bir client başka bir client'a mesaj atacaksa, bunu sunucu bilgisayara gönderecekler, sunucu bilgisayar kaynak client'ın adına bu mesajı hedef client'a iletecek.
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

tamam ama, bu durumda yine şöyle bir sorunum var.
mesajı gönderen server a gönderecek ama server diğer client a nasıl iletecek.
sonuçta her makinede serversocket olacak, ve ip tanımlamam gerekecek.
ve alt ip yi nasıl tanımlayacağım ?
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Tam da böyle birşey. Alt IP tanımlamak zorunda değilsin. Yani IP formatında olmak zorunda değil. Bunun yerine unique (tekil) olan bir kod yeterli. Mesela Osman_001 Osman_007 gibi. Bağlanan Client eğer IP nosu statik ise ilgili Internet IP'sini Osman_001 olarak verirsin. Ya da statik olmayan IP varsa onun yerine Client "ben Osman_001 'im" diye mesajında belirtir. Sen de listeye alırsın.

- Sonuç olarak sunucuya bağlanan her client bir ClientID alacak. Bu ClientID dilersen client bilgisayarlara göre özelleştirebilir, sadece birbirini görmesi gerekenleri gruplayabilirsin. Grup içindeki bir ClientID devrede ise o zaman aynı grupdaki diğer client'lar için yayın yaparsın "şu ClientID online oldu" gibisinden. Sonra bir client, Online olan diğer Client'e belirleyeceğin protokol vasıtası ile mesaj yollayacak.

- Her client bir server olmayacak. Bu sana külfet getirir. İlk mesajımda verdiğim modem ayar vs. konularında yani...
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

bana çok kısa bir kodla somut bir örnek verebilir misiniz ?
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Sunucu Projesi yapılandırması
Modem Route ayarları yapıldı
IP eğer statik değilse bu IP'yi internette bir yere basit bir INI dosyası olarak upload edersiniz. Client'ler bu IP'yi bu siteden indirip kullanırlar. Kendi içinde basit bir DNS çözümü olur.
İnternet IP adresini öğrendik ve http://www.osman.com.tr/IP.INI dosyası olarak gönderdik.
ONLINE ( IP:81.213.206.200 : Port 1024)

Client 01 projesinde olacaklar.
CONST
ClientID = 'Osman_001';
- Internetten http://www.osman.com.tr/IP.INI dosyasını indirdik IP adresini öğrendik.

ServerAddress := IP;
ServerPort := 1024
Connected := true;
SendText( 'BEN:'+CilentID );

ServerProjesi
'BEN:' ile başlayan metni alınca bunu bir Listeye aktarma görevi var. zaten Client'ın IP adresini öğrenmek için komut var.
OnClientRead
BEN: ile başlıyorsa iki noktadan sonraki kelime ClientID'sidir.
ClientAddress: 212.126.222.11 olduğunu öğrendik.
'212.126.222.11' (RemoteAddress) + '-' + 'Osman_001'
OnClientDisconnect
'212.126.222.11' ile başlayan bağlantıyı listeden sil.

Tüm Socket.Connections içinde döngüye girip herkese Osman_001'in bağlandığını bildirmek için SendText('YENİ:Osman_001'); yolarsın. Böylece bağlı Client'lar Osman_001'in bağlı olduğunu bilir.

Osman_001 -> Osman_002'ye mesaj atacaksa Server'a şöyle mesaj atar.

Kod: Tümünü seç

Sendtext('Mesajla:Osman_001->Osman_002=Merhaba dostum :) ');
Server bu mesajı alınca da Osman_002'yi listede arar ve bulunca bağlantılar listesinden onunkini bulur. Sonra da

Kod: Tümünü seç

Connections[10].SendText := 'MESAJ:Osman_001->Merhaba dostum :)';
der.. Bu mesajın Osman_001'den geldiğini Osman_002 anlar ancak ekranda sadece mesaj metnini görecek şekilde baştaki kısımları kırparsın.

- Burada mesajla gönderilen ilk kısımlar yazılımın anlayacağı şekilde kendine göre tasarlayacağın mesaj protokolüdür. Ben açıklayıcı olsun diye geniş geniş yazdım. Her byte değerli olduğundan protokol içeriğini kısa tutmalısın. Mesela
01 kimliğim
02 mesajla
03 ses yolla gibi..

01Osman_001
02Osman_002-Merhaba :)

gibisinden kısaltabilirsin. Sonuçta bu protokolü yorumlayacak olan yine bir programdır.

- Bundan bir sonuç çıkartabilirsin artık.
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

teşekkür ederim,
şimdilik uygulayacak enerjim kalmadı. sabaha deneyeceğim
kodlarla ilgili
...[ at, avrat, delphi ]...
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

Söylediğiniz şekilde uyguladım ve sorunsuz çalıştı.
Bu konudaki eksiğim
Connections[10].SendText := 'MESAJ:Osman_001->Merhaba dostum :)';
şekilnde bir transferi bilmiyordum. Tek makineyle bunu denedim ve başarılı oldu.

Teşekkür ederim, iyi çalışmalar
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Tebrik ederim. Çalışmalarında başarılar...
Resim
Resim ....Resim
aseka

Mesaj gönderen aseka »

--
En son aseka tarafından 18 Mar 2008 02:43 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

TCP sürekli bağlantıda olduğundan - IP numarası burada önemsiz. Sadece bilgi için...
Esas olan ServerIP'nin ve PORT numarasının bilinmesi ve vereceğin ClientID
Resim
Resim ....Resim
Cevapla