Giter VIP home page Giter VIP logo

irc-server's Introduction

IRC (Internet Relay Chat) Nedir?

Kullanıcıların anlık olarak metin tabanlı mesajlar gönderip alabildiği bir anlık mesajlaşma protokolüdür. IRC sunucuları, kullanıcıların IRC istemcileri aracılığıyla bağlanmasına ve birbirleriyle sohbet etmesine olanak tanır. Aynı zamanda operatörler (IRC operatörleri veya IRC op'ları) adı verilen kullanıcılara, sunucunun yönetimini ve denetimini sağlama yetkisi verir. Her bir IRC ağı, kendi IRC sunucularından oluşur ve kendi yöneticileri tarafından denetlenir. Bu sunucular dünya genelinde birçok farklı IRC ağI üzerinde faaliyet gösterebilirler. İnternetin erken dönemlerinde popülerleşmiş ve hâlâ birçok sunucusu ve kullanıcısı bulunmaktadır. Açık kaynaklı bir protokol olduğu için, kullanıcılar kendi IRC sunucularını veya istemci yazılımlarını oluşturabilir ve kullanabilirler. IRC, özellikle teknik topluluklar, açık kaynak yazılım projeleri ve diğer ilgi grupları arasında iletişim için hala kullanılan bir protokoldür.

IRC Network

IRC bağlantısı nasıl uygulanır?

IRC protokolü, TCP/IP tabanlı bir protokol olduğu için socket programlama kullanılarak sunuculara bağlanma, veri gönderme ve veri alma işlemleri gerçekleştirilir. Socket programlama, ağ iletişimini gerçekleştirmek için kullanılan bir programlama yöntemidir. Bir soket, bir ağ üzerindeki iki nokta arasındaki iletişimi temsil eder. IRC sunucuları da birer ağ noktasıdır ve kullanıcıların bu noktalara bağlanarak iletişim kurmalarına izin verir. Bir IRC istemcisi, IRC sunucusuna bir soket oluşturarak bağlanır, sunucuyla veri alışverişi yapar ve kullanıcıların IRC kanallarına veya özel mesajlaşma yoluyla iletişim kurmalarına olanak tanır. Socket programlama, IRC sunucularıyla etkileşimde bulunmak için düşük seviyeli bir yaklaşımdır çünkü IRC protokolü düşük seviyeli bir protokoldür ve doğrudan TCP/IP tabanlı ağ bağlantılarını kullanır. Socketler IRC sunucularında daha esnek ve özelleştirilmiş bir etkileşim sağlar, özellikle daha karmaşık işlemler, özel komutlar veya IRC sunucularının yönetimine ilişkin operatör yetkileri gibi özellikler gerektiğinde kullanışlıdır.

Clients

Server ve Client bilgisi

IRC ağlarında, kullanıcılar çeşitli IRC istemcileri (client) ile sunuculara bağlanarak, kanallar veya özel mesajlar aracılığıyla birbirleriyle iletişim kurabilirler.

IRC istemcileri (client), kullanıcıların IRC ağlarına bağlanmalarını ve IRC sunucuları ile iletişim kurmalarını sağlar. Kullanıcılar, IRC istemcileri aracılığıyla sunuculara bağlanarak, kullanıcı adı (nick) ve şifre gibi kimlik doğrulama bilgilerini kullanarak IRC ağına giriş yaparlar. Ardından, kullanıcılar, IRC komutlarını kullanarak kanallara veya diğer kullanıcılara mesaj gönderebilir, kanallara katılabilir, kanallardan ayrılabilir, kullanıcıları engelleyebilir ve diğer birçok IRC işlemini gerçekleştirebilirler.

IRC sunucuları (server), kullanıcıların IRC ağına bağlanmasına izin veren ve kullanıcıların mesajlarını, kanal bilgilerini ve diğer verileri aktaran sunucu yazılımlarıdır. IRC sunucuları, kullanıcıların bağlantılarını kabul eder ve kullanıcıların kimlik doğrulama bilgilerini doğrular. Sunucular, kullanıcıların mesajlarını, komutlarını ve diğer IRC verilerini kanallara veya kullanıcılara iletir. Genellikle dağıtık bir yapıda çalışır ve birden fazla sunucu arasında veri senkronizasyonunu sağlamak için protokoller kullanır. IRC istemci ve sunucuları arasındaki iletişim, genellikle IRC protokolü olarak bilinen standart bir metin tabanlı protokol üzerinden gerçekleştirilir. IRC protokolü, istemcilerin ve sunucuların birbirleriyle iletişim kurmak için kullanacakları komutları, mesaj biçimlerini ve protokol kurallarını tanımlar. Örneğin, kullanıcılar "/join" komutunu kullanarak bir kanala katılabilir, "/msg" komutunu kullanarak bir kullanıcıya özel bir mesaj gönderebilir veya "/quit" komutunu kullanarak IRC ağından çıkabilirler. IRC istemci ve sunucuları, kullanıcıların gerçek zamanlı iletişim kurmasına olanak tanır ve çeşitli IRC komutları ve mesaj biçimleri kullanılarak zengin bir iletişim deneyimi sunar.

Clients

Popüler IRC Clientler

  • HexChat: Windows, macOS, Linux gibi farklı platformlarda çalışabilen ücretsiz ve açık kaynak kodlu bir IRC istemcisidir. Kullanıcı dostu bir arayüze sahiptir ve pek çok özelliği destekler.

  • irssi: Linux ve macOS gibi Unix tabanlı sistemlerde kullanılabilen ücretsiz ve açık kaynak kodlu bir IRC istemcisidir. Komut satırı tabanlı bir arayüze sahiptir ve güçlü bir betikleme yetenekleri sunar.

  • WeeChat: Linux, macOS, BSD ve Windows gibi farklı platformlarda çalışabilen ücretsiz ve açık kaynak kodlu bir IRC istemcisidir. Komut satırı tabanlı bir arayüze sahiptir, ancak kullanıcı dostu bir eklenti sistemi sayesinde özelleştirilebilir.

  • mIRC: Windows tabanlı bir IRC istemcisidir ve ücretlidir. Popüler ve kullanıcı dostu bir arayüze sahiptir, birçok özelliği destekler ve geniş bir eklenti koleksiyonu bulunur.

  • Quassel IRC: Windows, macOS, Linux gibi farklı platformlarda çalışabilen açık kaynak kodlu bir IRC istemcisidir. İstemci ve sunucu olmak üzere iki bileşenden oluşur, böylece kullanıcıların istemciler arasında oturumlarını senkronize etmelerine olanak tanır.

Kullanılan socket fonksiyonları

  • int socket(int domain, int type, int protocol);

    • int domain: Soketin etki alanı - Oluşturulacak soketin etki alanını belirtir. Örneğin, IPv4 adreslerini kullanmak için AF_INET veya IPv6 adreslerini kullanmak için AF_INET6 gibi değerler kullanılabilir.
    • int type: Soketin tipi - Oluşturulacak soketin tipini belirtir. Örneğin, TCP (Stream) soketler için SOCK_STREAM veya UDP (Datagram) soketler için SOCK_DGRAM gibi değerler kullanılabilir.
    • int protocol: Soketin protokolü - Oluşturulacak soketin kullanacağı protokolü belirtir. Genellikle 0 değeri kullanılarak, domain ve tip parametrelerine bağlı olarak uygun bir protokol otomatik olarak seçilir. socket() fonksiyonu, başarılı bir şekilde tamamlandığında yeni bir soketin tanımlayıcısını (socket descriptor) döndürür. Hata durumunda -1 döndürerek bir hata kodu ile fonksiyonun tamamlandığını belirtir.
  • int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

    • sockfd: Soketin tanımlayıcısı (socket descriptor) - Değiştirilecek soketin tanımlayıcısıdır.
    • int level: Seçeneğin seviyesi - Ayarlanmak istenen seçeneğin seviyesini belirtir. Genellikle SOL_SOCKET seviyesi kullanılır, soket seviyesindeki seçenekleri temsil eder. Diğer seviyeler, protokol seviyelerindeki (örneğin, TCP veya UDP) seçenekleri değiştirmek için kullanılabilir.
    • int optname: Seçeneğin adı - Ayarlanmak istenen seçeneğin adını belirtir. Örnek olarak, SO_REUSEADDR gibi bir soket seçeneği adı kullanılabilir.
    • const void *optval: Seçeneğin değeri - Ayarlanmak istenen seçeneğin değerini belirtir. Bu parametre için bir işaretçi kullanılır.
    • socklen_t optlen: Seçeneğin değerinin boyutu - optval parametresinin işaret ettiği bellek alanının boyutunu belirtir.
  • int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

    • sockfd: Bağlanacak soketin dosya tanımlayıcısı (file descriptor).

    • addr: Bağlanacak adresin yapısını temsil eden bir struct sockaddr işaretçisi. IPv4 adresleri için struct sockaddr_in yapısı, IPv6 adresleri için struct sockaddr_in6 yapısı kullanılır.

    • addrlen: addr yapıının boyutunu temsil eden bir socklen_t değeri.

      bind() fonksiyonu, bir soketi belirtilen IP adresi ve port numarasına bağlar.
      IP adresi, genellikle struct sockaddr_in veya struct sockaddr_in6 yapılarındaki sin_addr veya sin6_addr alanına atanırken,
      port numarası da sin_port veya sin6_port alanına atanır.
      
  • int listen(int sockfd, int backlog);

    • sockfd: Bağlantıları dinlenecek soketin dosya tanımlayıcısı (file descriptor).

    • backlog: Kuyruğa alınacak en fazla bağlantı sayısını temsil eden bir tam sayı değeri.

      listen() fonksiyonu, belirtilen soketi pasif modda dinlemeye başlar.
      backlog parametresi, dinlenecek bağlantıların kuyruğa alınabileceği maksimum sayıyı belirler.
      Eğer bu kuyruk dolarsa, yeni bağlantılar reddedilir.
      
  • int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

    • sockfd: Bağlantı taleplerini kabul edecek olan soketin dosya tanımlayıcısı (file descriptor).

    • addr: Yeni bağlantının adres bilgisini içeren bir struct sockaddr işaretçisi. İstemci bağlantısı bilgileri bu yapıya yazılır.

    • addrlen: addr yapısının boyutunu temsil eden bir socklen_t işaretçisi. Başlangıçta, bu değişkenin değeri addr yapısının boyutunu içermelidir. accept() fonksiyonu tarafından gerçekleştirilen bağlantı ile ilgili adres bilgisi bu değişkene yazılır.

      accept() fonksiyonu, listen() fonksiyonu ile belirtilen soketi dinler ve bir istemci bağlantısı kabul eder.
      Yeni bir soket oluşturarak istemci ile iletişim kurmak için kullanılır.
      addr ve addrlen parametreleri, kabul edilen istemci bağlantısının adres bilgilerini içerir.
      
  • ssize_t recv(int sockfd, void *buf, size_t len, int flags);

    • sockfd: Veri alınacak soketin dosya tanımlayıcısı (file descriptor).

    • buf: Alınan verinin okunacağı bellek tamponunun işaretçisi.

    • len: Okunmak istenen verinin maksimum uzunluğunu temsil eden bir tam sayı değeri.

    • flags: İsteğe bağlı bayraklar (flags) parametresi. Bu parametre, veri alımı sırasında farklı davranışlar belirlemek için kullanılabilir. Genellikle 0 olarak belirtilir.

      recv() fonksiyonu, belirtilen soketten veri okuyarak buf işaretçisine kopyalar.
      len parametresi, okunacak maksimum veri uzunluğunu belirler.
      Fonksiyon, gerçekten okunan veri uzunluğunu döndürür. Okunan veri yoksa 0 döndürür.
      
  • int poll(struct pollfd *fds, nfds_t nfds, int timeout);

    • fds: struct pollfd türündeki bir dizi, her bir soketin durumunu ve dinlenecek olayları temsil eden yapıları içerir.

    • nfds: fds dizisinin eleman sayısı.

    • timeout: Fonksiyonun bloklanma süresini belirten bir zaman aşımı değeri. timeout değeri negatif bir sayı ise poll() fonksiyonu bloklu olarak çalışır ve olay meydana gelene kadar bekler. timeout değeri 0 ise poll() fonksiyonu hemen döner ve olayların durumunu kontrol eder.

      struct pollfd yapısı, poll() fonksiyonunda kullanılan her bir soketin durumunu ve dinlenecek olayları temsil eder. Bu yapı aşağıdaki gibidir:

      struct pollfd {
          int fd;
          short events;
          short revents;
      };
      
      - fd: Soketin dosya tanımlayıcısı (file descriptor).
      - events: Dinlenen olayları belirten flags.
        Hangi olayların dinleneceği bu alanda belirtilir. Örneğin POLLIN okuma olayını, POLLOUT yazma olayını  temsil eder.
      - revents: Geri dönen olayları (returned events) belirten bayraklar (flags).
        Bu alan, poll() fonksiyonu tarafından geri döndürülen olayları temsil eder.
        Hangi olayların  meydana geldiği bu alanda belirtilir.
      
      poll() fonksiyonu, fds dizisinde belirtilen soketleri dinler ve olayların meydana gelip gelmediğini kontrol eder.
      events alanında belirtilen olayların meydana gelmesi durumunda, revents alanında ilgili bayraklar (flags) ayarlanır.
      

irc-server's People

Contributors

denizkarhan avatar

Stargazers

fatih serhat turan avatar Emre Yılmaz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.