Skip to content

Millhn/Simple-web-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Basit Web Sunucusu - Java Socket Programlama

Java'nın Socket API'sini kullanarak sıfırdan oluşturulmuş, herhangi bir üçüncü taraf kütüphane veya framework kullanmayan hafif bir HTTP web sunucusu.

📋 Proje Genel Bakış

Bu proje, aşağıdaki özelliklere sahip basit bir web sunucusu oluşturarak ağ programlamanın temellerini göstermektedir:

  • 1989 portunu dinler
  • Web tarayıcılarından gelen HTTP isteklerini kabul eder
  • Öğrenci bilgilerini içeren stillendirilmiş bir HTML sayfası ile yanıt verir
  • Yalnızca Java'nın yerleşik ağ kütüphanelerini kullanır

🎯 Özellikler

  • ✅ Saf Java implementasyonu (harici bağımlılık yok)
  • ✅ Socket tabanlı TCP/IP iletişimi
  • ✅ HTTP/1.1 protokol desteği
  • ✅ CSS stillendirmeli özel HTML yanıtı
  • ✅ Birden fazla sıralı istemci bağlantısını işler
  • ✅ Hata ayıklama için konsol günlüğü

🛠️ Teknik Bileşenler

Gösterilen Ana Kavramlar

1. Socket Programlama

  • Socket: Ağ iletişimi için bir uç nokta (IP Adresi + Port Numarası)
  • ServerSocket: Belirli bir portta gelen istemci bağlantılarını dinler
  • ClientSocket: Bir istemciyle aktif bağlantıyı temsil eder

2. IP Adresi

  • Ağdaki cihazlar için benzersiz tanımlayıcı
  • Örnek: 127.0.0.1 (localhost - kendi bilgisayarınız)

3. Port Numarası

  • Bir IP adresinde numaralı bir ağ geçidi (0-65535)
  • Bu projede 1989 portu kullanılır
  • Bir binadaki (IP adresi) daire numarası gibi düşünülebilir

Kullanılan Java Sınıfları

Sınıf Amaç
ServerSocket 1989 portunda dinleyen bir sunucu oluşturur
Socket İstemci ve sunucu arasındaki bağlantıyı temsil eder
BufferedReader İstemciden gelen HTTP isteğini verimli şekilde okur
BufferedWriter İstemciye HTTP yanıtını verimli şekilde gönderir
InputStreamReader Bayt akışını karakter akışına dönüştürür (giriş)
OutputStreamWriter Karakter akışını bayt akışına dönüştürür (çıkış)

📂 Proje Yapısı

SimpleWebServer.java
├── main()              # Giriş noktası - sunucuyu başlatır
└── handleClient()      # Bireysel istemci isteklerini işler

🚀 Başlangıç

Ön Gereksinimler

  • Java Development Kit (JDK) 8 veya üzeri
  • Herhangi bir metin editörü veya IDE
  • Web tarayıcı (Chrome, Firefox, Safari, vb.)

Kurulum ve Çalıştırma

  1. Kodu derleyin:
javac SimpleWebServer.java
  1. Sunucuyu çalıştırın:
java SimpleWebServer
  1. Tarayıcınızı açın:
http://localhost:1989

Beklenen Çıktı

Konsol:

Server started on port 1989
Open http://localhost:1989 in your browser.
Request: GET / HTTP/1.1

Tarayıcı:

  • Mor renkli H1 başlığında öğrenci adı
  • Pembe renkli H2 başlığında öğrenci numarası
  • Stillendirilmiş içerikli biyografi bölümü

🔍 Nasıl Çalışır

Adım Adım Yürütme Akışı

1. Sunucu Başlatma
   └─> 1989 portunda ServerSocket oluşturulur
   └─> Sunucu dinleme moduna geçer

2. İstemci Bağlantısı
   └─> Tarayıcı localhost:1989'a HTTP isteği gönderir
   └─> accept() metodu bağlantıyı kabul eder
   └─> Bu istemci için yeni Socket nesnesi oluşturulur

3. İstek İşleme
   └─> BufferedReader HTTP istek satırını okur
   └─> İstek konsola kaydedilir
   └─> HTML yanıtı hazırlanır

4. Yanıt Gönderme
   └─> HTTP durum satırı gönderilir (200 OK)
   └─> HTTP başlıkları gönderilir (Content-Type, Content-Length)
   └─> Boş ayırıcı satır gönderilir
   └─> HTML içeriği gönderilir

5. Bağlantı Temizleme
   └─> Çıkış temizlenir (flush)
   └─> İstemci soketi kapatılır
   └─> Sunucu bir sonraki bağlantı için hazır olur

📡 HTTP Protokol Yapısı

HTTP İsteği (Tarayıcı → Sunucu)

GET / HTTP/1.1
Host: localhost:1989
User-Agent: Mozilla/5.0
Accept: text/html

HTTP Yanıtı (Sunucu → Tarayıcı)

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<!DOCTYPE html>
<html>
...
</html>

🎨 HTML/CSS Özellikleri

Sunulan web sayfası şunları içerir:

  • Times New Roman yazı tipi ailesi
  • Mor (#9370DB) H1 başlığı
  • Pembe (#FFC0CB) H2 başlığı
  • CSS ile duyarlı stillendirme
  • Kutu gölgesi ve yuvarlatılmış köşe efektleri
  • Temiz, modern düzen

🧪 Test Etme

Farklı Senaryoları Test Edin

  1. Çoklu bağlantılar:

    • Tarayıcıyı birkaç kez yenileyin
    • Her istek konsolda günlüğe kaydedilir
  2. Farklı tarayıcılar:

    • Chrome: http://localhost:1989
    • Firefox: http://localhost:1989
    • Safari: http://localhost:1989
  3. Ağ erişimi:

    • IP'nizi bulun: ipconfig (Windows) veya ifconfig (Mac/Linux)
    • Başka bir cihazdan erişin: http://IP_ADRESINIZ:1989

🔧 Sorun Giderme

Yaygın Sorunlar

Port Zaten Kullanımda:

java.net.BindException: Address already in use

Çözüm: Port numarasını değiştirin veya 1989 portunu kullanan işlemi sonlandırın

Tarayıcı "Bağlantı Reddedildi" Gösteriyor:

  • Sunucunun çalıştığını doğrulayın
  • Güvenlik duvarı ayarlarını kontrol edin
  • Doğru URL'yi kullandığınızdan emin olun: http://localhost:1989

Türkçe Karakterler Görüntülenmiyor:

  • InputStreamReader/OutputStreamReader'da UTF-8 kodlamasını kullandığınızdan emin olun
  • HTML'ye <meta charset="UTF-8"> ekleyin

📚 Öğrenme Hedefleri

Bu kodu inceledikten sonra şunları anlamalısınız:

  • ✅ TCP/IP soketleri nasıl çalışır
  • ✅ Sunucu-istemci iletişim modeli
  • ✅ HTTP protokolü temelleri (istek/yanıt döngüsü)
  • ✅ Java G/Ç akışları (Giriş/Çıkış)
  • ✅ Ağ programlama temelleri
  • ✅ Otomatik kaynak yönetimi için try-with-resources

🎓 Eğitsel Kullanım

Bu proje şunlar için tasarlanmıştır:

  • Ağ programlama öğrenen Bilgisayar Bilimleri öğrencileri
  • İstemci-sunucu mimarisini anlama
  • HTTP protokolü temellerini öğrenme
  • Socket programlama pratiği
  • Web sunucusu uygulama konseptleri

📝 Kod Açıklamaları

Kod, şunları açıklayan ayrıntılı Türkçe yorumlar içerir:

  • Socket kavramları
  • Port ve IP adresi
  • HTTP protokolü
  • Giriş/Çıkış akışları
  • Bağlantı yönetimi

🔐 Sınırlamalar

  • Tek iş parçacıklı: Aynı anda bir istemciyi işler
  • HTTPS yok: Yalnızca düz HTTP (SSL/TLS yok)
  • Statik içerik: Dinamik sayfa oluşturma yok
  • Temel hata işleme: Minimum istisna yönetimi
  • Yönlendirme yok: Tüm istekler için aynı sayfayı sunar

🚀 Olası İyileştirmeler

  1. Çoklu iş parçacığı: Birden fazla istemciyi aynı anda işleyin
  2. Yönlendirme: URL yoluna göre farklı sayfalar sunun
  3. Dosya sunma: HTML dosyalarını diskten sunun
  4. POST desteği: Form gönderimlerini işleyin
  5. Günlük kaydı: Günlükleri dosyaya yazın
  6. Yapılandırma: Portu yapılandırma dosyasından okuyun

👨‍🎓 Öğrenci Bilgileri

  • Ad: Milda Lestari Hida Nurfitri
  • Öğrenci No: 5240505062
  • Üniversite: Kırklareli Üniversitesi
  • Ders: Ağ Programlama / Socket Programlama

📄 Lisans

Bu, akademik amaçlar için hazırlanmış bir eğitim projesidir.

🤝 Katkıda Bulunma

Bu bir öğrenci projesidir. Kendi değişikliklerinizle denemeler yapmak için çatallayabilirsiniz!

📞 Destek

Kod hakkında sorular için:

  1. Satır içi yorumları inceleyin
  2. Java Socket API dokümantasyonunu çalışın
  3. HTTP/1.1 protokol temellerini anlayın
  4. Farklı port numaraları ve HTML içeriğiyle pratik yapın

☕ Java ile Yapıldı | Port 1989 | Saf Socket Programlama


📖 Hızlı Referans

Önemli Metotlar

  • ServerSocket(port) - Belirtilen portta sunucu oluşturur
  • accept() - İstemci bağlantısını bekler ve kabul eder (bloklar)
  • getInputStream() - Soketten giriş akışını alır
  • getOutputStream() - Sokete çıkış akışını alır
  • readLine() - Girişten bir satır okur
  • write() - Çıkışa veri yazar
  • flush() - Tüm verilerin gönderildiğinden emin olur
  • close() - Soket bağlantısını kapatır

HTTP Durum Kodları

  • 200 OK - İstek başarılı
  • 404 Not Found - Kaynak bulunamadı
  • 500 Internal Server Error - Sunucu hatası

About

Java programlama dili ve socket programlama kullanarak basit bir web sunucu oluşturmak

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages