serversocket-clientsocket, mantık kuramadım :(
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Kolay gelsin arkadaşlar. Ya bende basit olarak bi çalışma yapmak istiyorum. (Server-Client)DelphiOffline dan yardım alarak clientler den veri çekmeyi deniyorum. Ancak TServerSocket ve TClientSocket bileşenleri ile TcpClient, TcpServer ve TudpSocket bileşenleri INTERNET paletinde bulunması gerekiyo diyor ama ben bulamadım
acaba farklı bi comp. kurmakmı gerekiyo ? Yardımcı olursanız çok sevinirim. Kolay gelsin

@aseka
Not: işten yeni geldim, aradaki gecikme ondan.
- Sistemi doğru anlamışsınız. İfade etmeye çalıştığım şey aynen böyleydi.
- Diğer sorunuz için ise bir önceki mesajımda bildirdiğim gibi:
- SERVER ile bir kere bağlantı kurulduğunda, bu bağlantı kopana dek irtibat sürer. Yani SERVER geri cevap verirken mevcut bağlantıyı kullandığından CLIENT şubelerin IP nolarını bilmek zorunda değildir. Bunu anlatmaya çalışmıştım.
- Sadece diyalog söz konusu olduğundan kimin kime ne dediğini özelleştirmek için başına şube için belirlenen ID vasfı taşıyacak bir ifade ile direkt hedefe ulaştırma maksatlı idi. PROXY söz konusu olmasaydı IP nolarını bile ClientID olarak ayırt edici unsur olarak kullanabilirdiniz.
@lom
- TServerSocket, TClientSocket vb. bağlantı bileşenleri dclsockets paketinde ve isteğe bağlı olarak kurulmak üzere mevcut ancak aktif değildir. Siz bunu şöyle aktif edebilirsiniz.
- Delphi IDE'de Component / Install Packages seçimini yap
- Gelen ekranda ADD butonuna bas
- oradan klasör olarak delphi klasöründeki bin klasörünü bul
- listeden dclsockets yazan varsa şanslısın demektir. Onu seç ve kur.
- Bileşen paletinde Internet başlığı altında TServerSocket ve TClientSocket görünmesi lazım.
Not: işten yeni geldim, aradaki gecikme ondan.
- Sistemi doğru anlamışsınız. İfade etmeye çalıştığım şey aynen böyleydi.
- Diğer sorunuz için ise bir önceki mesajımda bildirdiğim gibi:
- Server / ClientSocket ile bağlantı kurulması için gereken şart, Client olarak bağlanacak şube bilgisayarlarının SERVE'e ait IP nosunu bilmek zorunda olmalarıdır.@mrmarman bir önceki mesajında yazdı: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
- SERVER ile bir kere bağlantı kurulduğunda, bu bağlantı kopana dek irtibat sürer. Yani SERVER geri cevap verirken mevcut bağlantıyı kullandığından CLIENT şubelerin IP nolarını bilmek zorunda değildir. Bunu anlatmaya çalışmıştım.
- Sadece diyalog söz konusu olduğundan kimin kime ne dediğini özelleştirmek için başına şube için belirlenen ID vasfı taşıyacak bir ifade ile direkt hedefe ulaştırma maksatlı idi. PROXY söz konusu olmasaydı IP nolarını bile ClientID olarak ayırt edici unsur olarak kullanabilirdiniz.
@lom
- TServerSocket, TClientSocket vb. bağlantı bileşenleri dclsockets paketinde ve isteğe bağlı olarak kurulmak üzere mevcut ancak aktif değildir. Siz bunu şöyle aktif edebilirsiniz.
- Delphi IDE'de Component / Install Packages seçimini yap
- Gelen ekranda ADD butonuna bas
- oradan klasör olarak delphi klasöründeki bin klasörünü bul
- listeden dclsockets yazan varsa şanslısın demektir. Onu seç ve kur.
- Bileşen paletinde Internet başlığı altında TServerSocket ve TClientSocket görünmesi lazım.
Kullanırsınız neden kullanmayasınız. transparan proxy otomatik route eder ( Türk Telekomun yaptığı gibi ). Eğer kurum içindeki bir Proxy server'dan bahsediyorsanız bu durumda fireball ayarlarından kurum proxy'sinden gereken yönlendirmeyi yaparsanız çalışır. Buna VPN benzeri bir çözüm de iş görecektir.
Istanbul'da çıkmasına bakmayın. GeoIP ile veritabanları farklı farklı olabiliyor. Yani IP bloğu bazı veritabanlarında İstanbul, bazılarında başka yer olabiliyor. Siz deneyip kendi test sonucunuzu irdeleyin. Mesela siz evinizdeki bilgisayardan server olun, arkadaşınız Client olarak bağlansın bağlandığınıda Remote Address olarak hangisi olduğunu net bir şekilde öğrenebilir, tersi işlem için kullanabilirsiniz. Kullanıp deneyebilirsiniz demek istedim.
merak ettigim bir olay
mrmarman bey...
herşey algoritmik olarak iyi güzelde burda bnmde kafamı kemiren bir durum var server osman01 den gelen mesajı osman02 ye
yollayacak tamam. lakin osman02 router arkasındaki 10 makinadan biri ise modemine kendi lan ipisini port forwarding yapmadığı
sürece o ileti nasıl osman02 nin makinesine girecek?? bn bu işi port forwarding yapmadan çözmiyorum. ha ayrı Server ha ayrı
Client-Server. sonuçta port forwarding yapılıyor client tarafınada
araştırıyordumki arkadaşımızda benzerini sormuş. ben neyi atlıyorum acaba? sanki bu msn sunucusu clientine iletiyi
yollarken ona 80. porttan yolluyor. modemde geç diyor. kusursuzca ne olursa olsun mal şaşmıyor.
yada clientler iletiyi biz görmeden downloadmı ediyor sunucudan?
herşey algoritmik olarak iyi güzelde burda bnmde kafamı kemiren bir durum var server osman01 den gelen mesajı osman02 ye
yollayacak tamam. lakin osman02 router arkasındaki 10 makinadan biri ise modemine kendi lan ipisini port forwarding yapmadığı
sürece o ileti nasıl osman02 nin makinesine girecek?? bn bu işi port forwarding yapmadan çözmiyorum. ha ayrı Server ha ayrı
Client-Server. sonuçta port forwarding yapılıyor client tarafınada

araştırıyordumki arkadaşımızda benzerini sormuş. ben neyi atlıyorum acaba? sanki bu msn sunucusu clientine iletiyi
yollarken ona 80. porttan yolluyor. modemde geç diyor. kusursuzca ne olursa olsun mal şaşmıyor.
yada clientler iletiyi biz görmeden downloadmı ediyor sunucudan?

- MSN 80 nolu porttan bilgi gönderirken iyi de cevap nasıl alıyor. MSN sunucusu Client IP'sine 80 nolu porttan geri bilgi gönderiyor ve bu IP'ye bağlı 100 makineye de aynı bilgi mi gidiyor ? Yok böyle bişey.
- Bence konuyu yanlış anladın ve her iki tarafa da SERVERSOCKET kurdun gibi geliyor bana. Böyle olmadığını söyle de okumaya devam et yoksa buradan sonra yazdıklarım hikaye kitabından iki paragraf olarak kalır.
- Server IP'sine bir clinet örneğin 1024 nolu port ile bağlanacak ise, bağlatı için Client makinede herhangi bir ROUTEing işlemine lüzum yok. Çünkü cevap geri dönüşleri mevcut bir bağlantı ile gerçekleşir.
- iki farklı kişinin telefon konuşmasına benzer. Bir kişi telefon numarasını bilmek zorunda ki karşı tarafı arayıp bağlantı kurmak zorunda. Ama diyalog başladığında diğer taraftaki kişinin irtibat kuran numarayı bilmek zorunluluğu yoktur. Mevzut bağlantıdan cevap verebilir, konuşabilir, soru sorabilir.
TServerSocket / TClientSocket bağlantısında tek taraftan bağlantı sağlanır ama bağlantı kopmadığı sürece aynı hat üzerinde çift taraflı veri alışverişi sağlanır.
- Kısaca
1. Bir Client -> Server'a bağlantı kurmak için Server'in IP'sine ihtiyacı vardır. Ayrıca gerekiyorsa Server'in ulaşılabilmesi için Route edilmesine ihtiyaç vardır.
2. Bir Client -> Server'a TEXT mesaj yollamak için aralarında önceden kurulmuş bir bağ ( connection ) olması lazım. Yukardaki işlem bu bağı kurar.
3. Bir Server -> herhangi bir Client'a TEXT mesaj yollamak için mevcut bağlantı listesinden ilgili Client'in index'ine yollar. Yani geri doğru IP bilmek zorunda değil çünkü zaten bağlılar.
- Client'lar için tek engel durum ki sen bence buna takıldın, çıkışları FIREWALL etmişseniz ve sadece bazıları serbest bırakmışsanız, çıkış yapacağınız PORT'u da serbest bırakmalısınız. Bu routing değildir.
- Bence konuyu yanlış anladın ve her iki tarafa da SERVERSOCKET kurdun gibi geliyor bana. Böyle olmadığını söyle de okumaya devam et yoksa buradan sonra yazdıklarım hikaye kitabından iki paragraf olarak kalır.
- Server IP'sine bir clinet örneğin 1024 nolu port ile bağlanacak ise, bağlatı için Client makinede herhangi bir ROUTEing işlemine lüzum yok. Çünkü cevap geri dönüşleri mevcut bir bağlantı ile gerçekleşir.
- iki farklı kişinin telefon konuşmasına benzer. Bir kişi telefon numarasını bilmek zorunda ki karşı tarafı arayıp bağlantı kurmak zorunda. Ama diyalog başladığında diğer taraftaki kişinin irtibat kuran numarayı bilmek zorunluluğu yoktur. Mevzut bağlantıdan cevap verebilir, konuşabilir, soru sorabilir.
TServerSocket / TClientSocket bağlantısında tek taraftan bağlantı sağlanır ama bağlantı kopmadığı sürece aynı hat üzerinde çift taraflı veri alışverişi sağlanır.
- Kısaca
1. Bir Client -> Server'a bağlantı kurmak için Server'in IP'sine ihtiyacı vardır. Ayrıca gerekiyorsa Server'in ulaşılabilmesi için Route edilmesine ihtiyaç vardır.
2. Bir Client -> Server'a TEXT mesaj yollamak için aralarında önceden kurulmuş bir bağ ( connection ) olması lazım. Yukardaki işlem bu bağı kurar.
3. Bir Server -> herhangi bir Client'a TEXT mesaj yollamak için mevcut bağlantı listesinden ilgili Client'in index'ine yollar. Yani geri doğru IP bilmek zorunda değil çünkü zaten bağlılar.
- Client'lar için tek engel durum ki sen bence buna takıldın, çıkışları FIREWALL etmişseniz ve sadece bazıları serbest bırakmışsanız, çıkış yapacağınız PORT'u da serbest bırakmalısınız. Bu routing değildir.
Araya girmiş gibi olacam, yalnız
Zamanında çok çektim de bu TCP/IP'den, baştan yanlış başlamamak lazım..
mrmarman yazdı:TCP sürekli bağlantıda olduğundan - IP numarası burada önemsiz.
Proxy bi kenera, aynı evden 2 kişi bağlansa disconnect durumunda kim silinecek?mrmarman daha önce yazdı:OnClientDisconnect
'212.126.222.11' ile başlayan bağlantıyı listeden sil.
Zamanında çok çektim de bu TCP/IP'den, baştan yanlış başlamamak lazım..
OnDisconnect'de disconnect olan socket'in index'ini alabiliyor muyduk?
ek olarak, connect ve disconnect durumlarında hangi client ile ilgili olduğunu anlmak için Socket.RemoteAddress dediğimde ip'sini göremediğim bilgisayarlar da olmuştu. bağlantıyı nasıl kuruyorlardı anlamıyordum
SocketHandle üzerinden çözüme gitmiştim, takılan olursa ayrıntıları yazarım.
ek olarak, connect ve disconnect durumlarında hangi client ile ilgili olduğunu anlmak için Socket.RemoteAddress dediğimde ip'sini göremediğim bilgisayarlar da olmuştu. bağlantıyı nasıl kuruyorlardı anlamıyordum

SocketHandle üzerinden çözüme gitmiştim, takılan olursa ayrıntıları yazarım.
En son ulu coder tarafından 08 Ara 2007 12:35 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
80. port ve download işi tabiki işin mübalasıydıda....
ben biraz karmaşık düşünmüşüm. saolasın anlaşıldı şimdi
beni düşündüren kısım, zaten tabiatı gereği kendiliğinden çözülüyormuş..
yani ben serverin hattına baglanmış isem aramızda bir yol oluşuyor zaten.
bu işin geriye dönecek iletisi artık var olan bu traceyi kullanıyor buna modem felanda karışamıyor.(firewallı dışında) ve direk ilgili client uygulamasının değişkenine iletiliyor vs ..vs.
ben biraz karmaşık düşünmüşüm. saolasın anlaşıldı şimdi
beni düşündüren kısım, zaten tabiatı gereği kendiliğinden çözülüyormuş..
yani ben serverin hattına baglanmış isem aramızda bir yol oluşuyor zaten.
bu işin geriye dönecek iletisi artık var olan bu traceyi kullanıyor buna modem felanda karışamıyor.(firewallı dışında) ve direk ilgili client uygulamasının değişkenine iletiliyor vs ..vs.
hocam en başa döndürme bizi. Sen basit bir döngü kurarsın, Connection sayın kadar. Sonra bağlantısı olanlara KİMSİN: sorusu gönderirsin hemencecik yeni ID listen oluşur...
ekleme // bu cevap @ulu coder içindi
ekleme // bu cevap @ulu coder içindi
En son mrmarman tarafından 08 Ara 2007 12:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.