İnterner üzerinden dosya kopyalama ...

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
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

İnterner üzerinden dosya kopyalama ...

Mesaj gönderen ulu coder »

S.A. arkadaşlar.
Başlıkta belirttiğim gibi bir proje yaptım.
Kullanımı;
IP editine karşı bilgisayarın IP'sini yazın.
iki bilgisayarda da sol tarftan port açın
Açılan portlara diğer bilgisayardan bağlanın.
Örneğin A bilgisayarı port 30'u açsın, B Port 40'ı
B bilgisayarında bağlan editine 30, A'da 40 yazın.

Dosyayı alacak olan bilgisayarda sağ taraftan da bir port açın.
Bu portu, gönderecek olan programa bildirmenize gerek yok, açtığınız anda diğerinin haberi oluyor.

Gerisini halledersiniz zaten...

EDİT: Hatalı bir programmış.
Kullanmayın, sadece kendi kodlarınız için ilk adım olabilir.

Buyrun
En son ulu coder tarafından 30 May 2006 03:25 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Projeye baktım, ama bazı sıkıntılar var.

1. Borland Socket arabirimi kötü olduğu için TServerSocket ve TClientSocket'leri terketti. Bu yüzden daha fazla bunlar üzerinde çalışmak ne kadar anlamlı sorgulanmalı bence.

2. Senin yaptığın şekilde dosya transferi yapılırken çok ciddi sorunlar çıkar. Özellikle 8 KB'den büyük dosyalarda. Çünkü socket arabirimleri çok kötü olduğu için, aslında ne kadar veri gitmesi gerektiğini bilemezsin. Ayrıca dosyanın bitip bitmediğini de bilemezsin. Özellikle internet üzerinde. Adam gibi bir protokol hazırlaman gerekir. Yani önce Client-Server bağlantısı kurulacak. Sonra "x Byte dosya gönderiyorum hazır mısın" diye sorulacak. Karşı taraf da "hazırım, yolla" derse dosya gönderilmeye başlanacak. Karşı taraf gelen bütün bilgileri bir yerde tutacak (en uygunu sanırım MemoryStream olur) ve boyut daha önce kendisine söylenen boyuta ulaştığında, "tamam mevzuu burada sona ermiştir" diyecek. Bu da dikkat edersen çok zahmetli bir iş. Çünkü dosyanın chunlarını da gönderirken aynı zamanda başına daima bir strucy koymak zorunda kalacaksın. Yani veriyi Buffer boyutu kadar parçalaman gerekecek. Anlatırken bile sıkılıyorum, kodlarken ne kadar sıkıcı olduğunu sen düşün artık :)

Bunun daha kolay bir yöntemi var. Ben hemen sana kodları göndermeyeyim, onun yerine sen TWinSocketStream sınıfını biraz incele. Eğer işin içinden çıkamazsan ya da acele gerekiyorsa nasıl yapılacağı ile ilgili bir kod yazarım. Bunu lütfen terbiyesizlik olarak düşünmeyin, tek amacım ulu coder'in kendisinin araştırarak öğrenmesi. Böylece daha kalıcı olacaktır bilgi.

Kolay gelsin,
Bahadır Alkaç
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

26,8 MB dosyayı 5-6 kez hatasızca göndermem ne kadar şanslı olduğumun göstergesi herhalde
Cevapla