Socket programlama

C, C++ ve C++ Builder ile ilgili konuları buraya yazabilirsiniz.
Cevapla
efedex
Üye
Mesajlar: 3
Kayıt: 22 Nis 2009 06:45

Socket programlama

Mesaj gönderen efedex » 02 May 2009 05:10

S.a. ServerSocket ve ClientSocket bileşenleri ile bi proje hazırlamaya çalışıyorum (Indy tavsiye edildi fakat bağlantı kurmayı pek beceremedim yabancı dilimde olmadığı ve türkçe kaynakta bulamadığım için mecburen ServerSocket ve ClientSocket kullanmaya çalışıyorum)

Kod: Tümünü seç

ss->Socket->Connections[i]->SendText(mesaj);
satırını kullanarak tek cliente mesaj gönderebiliyorum veya

Kod: Tümünü seç

for (int i=0;ss->Socket->ActiveConnections-1;i++){
                ss->Socket->Connections[i]->SendText(mesaj);
        }
kodlarıyla tüm clientlere mesaj gönderebiliyorum yapmak istediğim ise bellirli bi ip ye veri göndermek. Örneğin 88.888.8.88 adresine veri göndermek istiyorum yani bağlı 1. , 2. cliente falan gibi deilde ip bazlı veri göndermek istiyorum bu konuda bilgilerinizi paylaşırsanız memnun olurum....



Saygılarımla
İyi çalışmalar

neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Socket programlama

Mesaj gönderen neu84 » 06 Oca 2011 01:43

aynı sorun bendede var şuan, ama size 2009 mayıstan beri cevap veren olmamış, bende o zaman yormiyim kendimi vazgeçiyim aramaktan madem cevap veren olmuyo.


Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 830
Kayıt: 01 Eki 2007 06:16
Konum: İstanbul
İletişim:

Re: Socket programlama

Mesaj gönderen G.Arkas » 12 May 2011 03:45

Öncelikle Client makinalarda ki IP adresini sabitlemeniz gerekiryor. Bunu No-IP ya da DYNDNS ücretsiz servisleriyle yapabilirsiniz.

Anlamadığım nokta şu ki siz Server sınız. Diğer makinalar Client yani Reverse Connection kullanıyorsunuz. Böyle bir durumda Zaten IP sabitlemeye gerek yok (Client Makinalar için) kendi IP nizi sabitlemeniz yeterli. Eğer bahsettiğiniz şey size ait olamayan bir istemciye komut göndermekse o zaman işler değişir hatta imkansızlaşır. Ben sorunuzdan bunu çıkardım ama yanlış anlamışta olabilirim.

Hemen düzelteyim anladım galiba. Siz LAN ile değil WAN üzerinden haberleşmek istiyorsunuz. Bunun için modemden Port Yönlendirmesi yapmanız gerekli. Aksi halde socketler bağlantı kuramazlar.

Client makinalara Timer koyun. Clientsocket lerin Errorcode lerini "0" yapın. Timerdan sürekli bağlantı isteği gönderin.
Server makinanın modemine girip 192.168.1.xxx oradan port forwarding bölümünde kullandığınız portu açın. TCP yada UDP olarak belirtmeniz gerekir. Makineler size bağlandığında istediğiniz Client ile haberleşebilirsiniz. Ancak bilgisayarı kapatıp açtığınızda IP niz değişeceği için yukarıda belirttiğim servislerden free account alarak IP nizi sabitlemelisiniz. Port yönlendirme yerine UPNP de kullanabilirsiniz ancak modeminizin bu özelliği desteklemesi gerekir. Sanal bir Tunnel oluşturup bağlantı kurabilirsiniz.

İyi çalışmalar.
Resim

PROGRAMADOR
Üye
Mesajlar: 232
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Socket programlama

Mesaj gönderen PROGRAMADOR » 14 May 2014 12:03

Server socket accept ile client socketi kabul ederken ipyi bir değişkene atamalısınız. Böylelikle sorun olmaz.
Örneğin:

type
TUser=class(TObject)
socket:TSocket; //kullanıcının socketi
ipint:cardinal;//ip adresi, cardinal türünde
ips:string; //ip adresi string türünde
port:word;//port adresi 0-65535 arası
in_buffer:array[0..8191] of byte; //kullanıcıdan gelen veri
nickname:ansistring;
out_msgs:Tlist<ansistring>; //kullanıcının mesajlarının biriktiği yer
constructor Create;
destructor Destroy; override;
end;

İyi çalışmalar.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...

Cevapla