Forum: Ders Arası RSS
Soket Oluşturma Örneği[İstek]
Sayfa:  1  2  sonraki 
Avatar
huseyin #1
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Soket Oluşturma Örneği[İstek]
merhaba arkadaşlar

D ile bir soket oluşturup veri gönderip alma hakkında bana 2-3 örnek verebilir misiniz dlang.org dan baktıklarımdan birşey anlamadım açıkçası :D
Huseyin
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bunu, Ali hocam da kabül ederse istek kabül edelim; bir ders konusunu işlemek üzere...

Ama forumu takip edenler ile birlikte sınıfı inceleyip örnek türetelim olmaz mı?

Ayrıca tartışmaya şurada devam edelim, ne dersin? Çünkü benzer bir soru geçen sene, yıl sonuna doğru ve hatta senin tarafından sorulmuş...:)

Belki çatıları incelemek faydalı olabilir. Sonuçta onlar D tarafından sunulmuş olanakları kullanıyorlar. Ama dolaylı yollardan kütüphaneye (ws2_32.lib, wsock32.lib) erişerek; ama doğrudan D ilintileri vasıtasıyla (std.c.windows.winsock, std.c.linux.socket) çalışıyor. Yani demek istediğim, işletim sisteminin olanaklarını araştırmaya ihtiyaç bırakmadan, bir kısım gerekli enum vb. veri türlerini de tanımlayarak bu imkanı bize sunmuşlar.

Sanırım çok zor değildir... <_<
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #3
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ek olarak...

Ben TCP/IP'nin katman yapıları dışında neredeyse pek bir şey bilmiyorum. Internette arama yapan sıradan bir web kullanıcısı kadar biliyor olmalıyım. Buna rağmen işimiz bilgisayar ve internet üzerinden olduğuna göre artık şu soket midir, roket midir her ne haltsa öğrenelim gitsin...:)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
huseyin #4
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Salih Dinçer on 2013-04-13, 21:41:
Ek olarak...

Ben TCP/IP'nin katman yapıları dışında neredeyse pek bir şey bilmiyorum. Internette arama yapan sıradan bir web kullanıcısı kadar biliyor olmalıyım. Buna rağmen işimiz bilgisayar ve internet üzerinden olduğuna göre artık şu soket midir, roket midir her ne haltsa öğrenelim gitsin...:)

Sevgiler, saygılar...
Bir öğrenemedim c++ da birkaç dokuman buldum sağlam adamlardan ama malesef ben yine anlamıyorum yine anlamıyorum biri bana bunu anlatsın :D
Huseyin
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben buna bakmayı düşünüyorum ama şu sıralar çok meşgulum. İki hafta sonra tekrar deneyelim. :)

Ali
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Aşağıda hem sunucu hem de istemci olarak kullanılabilen bir örnek var.

Denemek için aynı bilgisayar üzerinde bir konsolda önce sunucuyu başlatın. Programın ismi 'deneme' olsun:

$ ./deneme


Ondan sonra başka bir konsolda istemciyi başlatın:

$ ./deneme --rol=istemci


İstemci sunucuya 15 bayt bilgi gönderecek ve ikisi de sonlanacaklar. Olayı açıklama satırlarında anlatıyorum:

import std.stdio;
import std.socket;
import std.getopt;
import std.string;
 
enum port = 8080;
 
int main(string[] parametreler)
{
    // Sunucu rolünde mi olalım istemci mi
    enum Rol { sunucu, istemci }
    Rol rol;
 
    try {
        // Rol olamayacak değer geldiğinde hata atar
        getopt(parametreler, "rol", &rol);
 
    } catch {
        stderr.writefln("Kullanım:\n    %s --rol={sunucu|istemci}",
                        parametreler[0]);
        return 1;
    }
 
    final switch (rol) {
    case Rol.sunucu:  sunucu(); break;
    case Rol.istemci: istemci(); break;
    }
 
    return 0;
}
 
void sunucu()
{
    // Önce bağlantıları karşılayacak olan soketi hazırlıyoruz
    auto dinleyici = new TcpSocket();
    scope (exit) {
        /* Gereken temizlik işlemleri
         *
         * Not: Tabii ki alt düzeyler kavramlar olan soketlerle böyle uğraşmak
         * yerine soketi sarmalayan bir Soket yapısı tanımlayabiliriz ve bu
         * işlemleri o türün sonlandırıcısında yapabiliriz. */
 
        writefln("Yerel %s kapatılıyor", dinleyici.localAddress());
 
        // BOTH: "hem okuma hem yazma" anlamında
        dinleyici.shutdown(SocketShutdown.BOTH);
        dinleyici.close();
    }
 
    // Hangi portu dinleyeceğini belirtiyoruz
    dinleyici.bind(new InternetAddress(port));
    writefln("Port: %s", port);
 
    // İstemci bekliyoruz
    dinleyici.listen(1);
    writefln("Bekliyorum...");
 
    // Şimdi o sokette bağlantı kabul ediyoruz
    Socket bağlantı = dinleyici.accept();
    scope (exit) {
        writefln("İstemci bağlantısı %s kapatılıyor", bağlantı.remoteAddress());
        bağlantı.shutdown(SocketShutdown.BOTH);
        bağlantı.close();
    }
    writefln("İstemci bağlandı: %s", bağlantı.remoteAddress());
 
    // Okunan veriyi bu belleğe alacağız
    ubyte[1000] bellek;
    bool bitti_mi = false;
 
    while (!bitti_mi) {
        const adet = bağlantı.receive(bellek);
 
        if (adet == Socket.ERROR) {
            writefln("OKUMA HATASI");
 
        } else {
            writefln("%s bayt aldım: %s", adet, bellek[0..adet]);
            // Okunan verinin ne anlama geldiği bütünüyle sunucu ve istemci
            // arasındaki protokole bağlıdır.
        }
 
        bitti_mi = (adet < bellek.length);
    }
}
 
void istemci()
{
    auto bağlantı = new TcpSocket();
    bağlantı.connect(new InternetAddress("127.0.0.1", port));
    scope (exit) {
        bağlantı.shutdown(SocketShutdown.BOTH);
        bağlantı.close();
    }
 
    // Bu örnekte mesajı string olarak göndereceğiz. Aslında send() parametre
    // olarak const(void)[] alır.
    string mesaj = format("%s%s%s", "merhaba", 42, "dünya");
    const adet = bağlantı.send(mesaj);
    writefln("%s bayt gönderdim", adet);
}

Ali
Avatar
huseyin #7
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Oh be sonunda anladım teşekkür ederim D de soket de çok kolaymış
Huseyin
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Aynı konu Ceviz.net forumunda da açıldı:

  http://forum.ceviz.net/d-dili/127048-ddili-socket-okuma-ve…

Bu aşamada programın son hali şu mesajda:

  http://forum.ceviz.net/d-dili/127048-ddili-socket-okuma-ve…

Ali
agora #9
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Guzel bir konu aslinda ben de soket hakkinda bir konu acmistim sorum bu yondeydi :)

Simdi bilgimin yetmedigi bir noktadan soru soracagim yuzeysel cevap yeterli olur mantik acisindan.

Ornegin bir program var. Bu programa konsoldan bir deger giriyoruz. Bu degerleri isliyoruz ve sadece bu programa ozel bi port ile istemci baslatiyoruz. Bunu nasil saglariz acaba.

ornegin phpmyadmin :) mysql 3306 portunu kullaniyor ve ornegin 3306 portuna erisim saglanmazsa phpmyadmin'e ulasim saglanmiyor. ben de buna benzer bi konu dusunuyorum da acaba yapilabilir mi?

localhost:1907 gibi cagiricam ve degerleri arayuzde gostericem. Sorun html tasarim vs. degil :) konsoldan islemi yaparken, veri eklerken mutlaka bir port'a bagli olmak gerekiyor. bunlar mumkun olan seyler mi? yapmak icin neler gerekiyor acaba? :)

Ben derdimi aslinda aciklayamadim :( Anlayabilen abiler, arkadaslarim aciklayabilir mi derdimi? :)
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Programın senin istediğin portu dinlemesini mi istiyorsun? Bu soket örnekleri aynen onu yapıyorlar zaten: Port programın başında 8080 olarak belirlenmiş. Dinleyici oradan dinliyor. Tabii sabit bir değer olmak zorunda değil; çalışma zamanında da belirlenebilir.

Ali
agora #11
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet hocam :) O program onu yapiyor mesela ben o programda o port acilmadan veri ekleme, silme vs. islemleri yapilsin istemiyorum. O port uzerine ayrica bir de web tarafli goruntuleyici istiyorum. MySQL & PhpMyAdmin mantiginda bunlar yapilabilir seyler degil mi hocam? :)
acehreli (Moderatör) #12
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
agora:
o programda o port acilmadan veri ekleme, silme vs. islemleri yapilsin istemiyorum

Anladım galiba: "port açılmadan" deyince sistem düzeyinde açılmasından bahsediyorsun.

Sistemin o porta dışarıdan erişime izin verip vermediğinin nasıl belirleneceğini bilmiyorum. Sistem veriyor desek bile dış tarafta bir firewall vardır o izin vermez.

Program başlar, şu portu dinliyorum der, ve beklemeye başlar. O porttan gelebilen programla konuşur, gelemeyen konuşamaz. Programın bundan fazla ne isteği olabilir ki?

MySQL & PhpMyAdmin mantiginda

Kusura bakma, o konuda hiç deneyimim yok. :) Galiba o yüzden ne demek istediğin anlayamıyorum.

bunlar yapilabilir seyler degil mi hocam? :)

Aklına öyle bir soru geldiğinde yanıtı her zaman için "evet". Mikroişlemciyi istediğimiz gibi yönetme ve istediğimiz C kütüphanesini kullanma gücü veren bir dilden bahsediyoruz. Nasıl bir eksiklik olabilir ki? :)

Ali
agora #13
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam ben de anlatamadim zaten :) yani sorun bende. en onemli seyleri anlatamiyorum :)

Bir de socket programlamada localhost olarak aciyorum server cok yavas. Bu winsock nesnesi ile mi alakali.
acehreli (Moderatör) #14
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
agora:
Bir de socket programlamada localhost olarak aciyorum server cok yavas.

Ne ile karşılaştırınca çok yavaş? Programın içine gereksizce 10 saniye bekleme yerleştirmiştim. Onun yüzündendir herhalde. (?)

Bu winsock nesnesi ile mi alakali.

winsock nesnesi? Öyledir herhalde... :) (Benim bu konularda gerçekten deneyimim yok. Soket örneği istendi; bir şeyleri bir araya getirdim; başka bir şey bilmiyorum...)

Ali
agora #15
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam browserdan acmaya calisinca biraz yavas. Ama bu sizi yazdiginiz koddan bagimsizmis. winsock nesnesini c# ile kullaniyorduk.

karsilastirmaya gelince mesela wamp server'in localhost hizi ile buradaki hiz yavas. burada belki de basit mantik isletildigi ornek kod istendigi icin oyle. wamp apache modulleri ile geliyor.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  sonraki 
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 19:59:49 (UTC -08:00)